program story

Python 2 print 문에 비해 Python 3.x의 새로운 인쇄 기능의 장점은 무엇입니까?

inputbox 2020. 11. 7. 09:29
반응형

Python 2 print 문에 비해 Python 3.x의 새로운 인쇄 기능의 장점은 무엇입니까?


나는 print가 함수 (3.x)가 성명 (2.x)보다 낫다고 여러 번 들었다. 그런데 왜?

나는 두 개의 문자 (즉, 괄호)를 더 적게 입력 할 수 있었기 때문에 주로 성명서라는 팬이었습니다.

나는 print 문이 그것을 자르지 않고 기능이 더 우수한 몇 가지 상황을보고 싶습니다.


Jochen의 답변Sven의 답변 모든 것 외에 다음을 추가합니다.

다음 과 같이 print()사용할 수없는 장소에서 사용할 수 있습니다 print.

[print(x) for x in range(10)]

이론적 해석

print 서술문은 Guido의 "Python Regrets"프레젠테이션 [1] 과 같이 Python 3000에서 제거 될 모호한 언어 기능 목록에 오랫동안 나타났습니다 . 따라서이 PEP의 목적은 새로운 것은 아니지만 Python 개발자들 사이에서 많은 논쟁이있을 수 있습니다.

print () 함수에 대한 다음 인수는 Guido가 직접 작성한 python-3000 메시지에서 추출한 것입니다 [2] :

  • print는 전용 명령문이있는 유일한 애플리케이션 레벨 기능입니다. 파이썬 세계에서 구문은 일반적으로 컴파일러의 도움 없이는 무언가를 할 수없는 마지막 수단으로 사용됩니다 . 인쇄물은 이러한 예외에 해당되지 않습니다.
  • 애플리케이션 개발의 어느 시점에서 누군가는 다른 I / O 라이브러리에 대한 호출이나 호출을 로깅하는 것과 같이보다 정교한 것으로 인쇄 출력을 대체해야 할 필요성을 자주 느낍니다. print () 함수를 사용하면 이것은 간단한 문자열 대체입니다. 오늘날 모든 괄호를 추가하고 >> 스트림 스타일 구문을 변환하는 것은 엉망입니다.
  • 인쇄를위한 특수 구문을 갖는 것은 진화에 훨씬 더 큰 장벽을 세웁니다. 예를 들어, 가상의 새로운 printf () 함수가 print () 함수와 공존 할 때 너무 많이 가져 오지 않습니다.
  • 공백이 아닌 다른 구분 기호가 필요하거나 전혀 필요하지 않은 경우 print 문을 다른 호출로 변환하는 쉬운 방법이 없습니다. 또한 공백이 아닌 다른 구분 기호를 사용하여 개체를 편리하게 인쇄 할 수 있는 쉬운 방법이 전혀 없습니다 .
  • print ()가 함수라면, 한 모듈 내에서 (단지 def print(*args):...) 또는 프로그램 전체에서 (예 : 다른 함수를 넣기에 __builtin__.print) 교체하는 것이 훨씬 쉬울 것 입니다. 있는 그대로 write () 메서드를 사용하여 클래스를 작성하고 sys.stdout에 할당하여이를 수행 할 수 있습니다. 이것은 나쁘지 않지만 확실히 훨씬 더 큰 개념적 도약이며 인쇄와는 다른 수준에서 작동합니다.

PEP 3105 – 인쇄를 기능으로 만들기


print함수의 장점 중 하나 는 일관성입니다. 그것이 성명서 일 이유가 없습니다. 이 두 줄 비교

2.x: print >> my_file, x
3.x: print(x, file=my_file)

새 버전은 파이썬과 훨씬 더 비슷하지 않습니까?

기능 버전의 또 다른 장점은 유연성입니다. 예를 들어 print디버깅 목적으로 모든 호출 을 포착 하려면 이제 간단히 재정의하면됩니다 print.

def print(*args, **kwargs):
    # whatever
    __builtins__.print(*args, **kwargs)

나는이 질문에 대해 생각했고 파이썬 3 버전의 장점에 대해 전혀 몰랐습니다. 하지만 pandas.DataFrame(없이 Index([...])) 의 열을 인쇄해야 할 때

* df.columns 인쇄

예외를 throw하는 동안

print (* df.columns)

잘 작동합니다! 여러 통화 인쇄에서 동일한 (구성 가능한) 인쇄 옵션을 사용하려는 경우 사전에 저장하고 다음과 같이 전달할 수 있습니다.**print_options

그래서 적어도 *args, **kw_args트릭을위한 좋은 이유있는 print기능 할 수는!


내장을 print사용자 정의로 바꿀 수 있습니다 .

import os
import sys

def print(s):
   sys.stderr.write('Will now print ' + str(s) + '.' + os.linesep)
   sys.stdout.write(str(s) + os.linesep)

print(['A', 'list'])
# Output: 
# stderr: Will now print ['A', 'list'].
# stdout: ['A', 'list']

print람다 또는 함수 호출 등에서 사용할 수 있습니다 .

example_timeout_function(call=lambda: print('Hello world'), timeout=5)
do_things(print_function=print)

참고 URL : https://stackoverflow.com/questions/6239887/what-is-the-advantage-of-the-new-print-function-in-python-3-x-over-the-python-2

반응형