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에 할당하여이를 수행 할 수 있습니다. 이것은 나쁘지 않지만 확실히 훨씬 더 큰 개념적 도약이며 인쇄와는 다른 수준에서 작동합니다.
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)
'program story' 카테고리의 다른 글
| 하위 문자열 색인 범위 (0) | 2020.11.07 |
|---|---|
| Rails 3 / 모델이없는 양식 : 모델에 연결되지 않은 양식을 작성하려면 어떻게해야합니까? (0) | 2020.11.07 |
| TextView의 문자 수를 제한 할 수 있습니까? (0) | 2020.11.07 |
| 큰 xlsx 파일을 R로 가져 오시겠습니까? (0) | 2020.11.07 |
| match (not (isDisplayed ()))가 NoMatchingViewException으로 실패합니다. (0) | 2020.11.07 |