왜 print 는 Python 3 에서 함수 가 되 었 습 니까?
올해 초 Python 이 Github 으로 이전 하기 로 결정 한 것 은 Brett Cannon 이 Python 커 뮤 니 티 의 의견 을 구 한 후에 나 온 것 이다.그 는 이것 에 대해 서도 해명 을 했다.
print 문장 과 print 함수 의 차이
print 구문
Python 2 에서 print 문장의 가장 간단 한 사용 형식 은
print A
인 데 이것 은 실 행 된 것 과 같다 sys.stdout.write(str(A) + '
')
.쉼표 를 구분자 로 하여 추가 매개 변수 (argument) 를 전달 하면 이 매개 변 수 는 str()
함수 로 전 달 됩 니 다. 마지막 으로 인쇄 할 때 매개 변수 간 에 한 칸 씩 비어 있 습 니 다.예 를 들 어 print A, B, C
는 sys.stdout.write(' '.join(map(str, [A, B, C])) + '
')
에 해당 한다.print 문장의 마지막 에 쉼표 를 추가 하면 단행자
를 추가 하지 않 습 니 다. 즉, print A
는 sys.stdout.write(str(A))
에 해당 합 니 다.2.0 버 전부터 Python 은
print >>
구문 의 최종 출력 문자열 을 재 설정 print
하 는 문법 을 도입 했다.예 를 들 어 print >> output, A
는 output.write(str(A) + '
')
에 해당 한다.print 함수
Python 으로 print 함 수 를 실현 한다 면 함수 정 의 는 다음 과 같 아야 합 니 다.
import sys
def print(*objects, sep=None, end=None, file=None, flush=False):
"""A Python translation of the C code for builtins.print().
"""
if sep is None:
sep = ' '
if end is None:
end = '
'
if file is None:
file = sys.stdout
file.write(sep.join(map(str, objects)) + end)
if flush:
file.flush()
위의 코드 에서 우 리 는 Python 3 의 print 함수 가 print 문장의 모든 특성 을 실현 한 것 을 발견 할 수 있 습 니 다.
print A == print(A)
print A, B, C == print(A, B, C)
print A, == print(A, end='')
print >> output, A == print(A, file=output)
위의 예제 코드 에서 알 수 있 듯 이 print 함 수 를 사용 하 는 것 은 현저 한 장점 이 있 습 니 다. print 문 구 를 사용 하 는 것 에 비해 우 리 는 현재 다른 구분자 (separator) 와 끝 자 (end string) 를 지정 할 수 있 습 니 다.
관건 은 유연성 에 있다
print 를 함수 로 바 꾸 는 진정한 교묘 함 과 유연성 은 쉽게 발견 되 지 않 는 다.print 가 함수 가 된 후에 Python 사용자 와 Python 개발 팀 에 큰 유연성 을 가 져 왔 습 니 다.사용자 에 게 이것 은
print
을 표현 식 (expression) 으로 사용 할 수 있 습 니 다.이에 비해 print 문 구 는 구문 으로 만 사용 할 수 있 습 니 다.예 를 들 어 각 줄 뒤에 생략 번호 (ellipsis) 를 인쇄 하고 싶다 고 가정 하면 이 줄 이 아직 끝나 지 않 았 음 을 나타 낸다.print 문 구 를 사용 하면 두 가지 선택 이 있 습 니 다.# ...
print A, '...'
# ( print ) ...
def ellipsis_print(*args):
for arg in args:
print arg, '',
print '...'
그러나 Python 3 에서 더 좋 은 해결 방법 을 선택 할 수 있 습 니 다.
# ...
print(A, end='...
')
# , print ...
ellipsis_print = lambda *args, **kwargs: print(*args, **kwargs, end='...
')
# ...
import functools
ellipsis_print = functools.partial(print, end='...
')
다시 말 하면 함수 가 되면
print
구성 요소 화 될 수 있 고 문장 print
으로 는 지원 할 수 없다.그리고 자신 이 좋아 하 는 print
함 수 를 만들어 서 builtins.print
에 할당 하면 자체 가 가 진 함 수 를 덮어 쓸 수 있 습 니 다.이 점 은 Python 2 에서 실 현 될 수 없다.Python 개발 팀 에 게 그들 은 더 이상 문법 적 차원 에서
print
의 관련 기능 을 실현 할 필요 가 없다.예 를 들 어 print
문구 도 지 정 된 구분 자 를 유연 하 게 지원 하고 싶다 면 어떻게 실현 하 시 겠 습 니까?이것 은 상당히 해결 하기 어 려 운 설계 난제 가 될 것 이다.그러나 print 가 함수 가 되면 하나의 인자 만 추가 하면 해 결 됩 니 다.Python 에서 함 수 는 임의의 수량의 매개 변 수 를 받 아들 일 수 있 는데 이것 은 밑바닥 에서 문법 을 실현 하 는 데 가 져 오 는 유연성 보다 훨씬 크다.우 리 는 문법 실현 은 이렇게 하지 않 으 면 안 되 는 기능 이나 문법 형식 으로 이 루어 진 후에 가 독성 기능 을 크게 향상 시 켜 야 한 다 는 것 을 주의해 야 한다.
print
이 사례 에서 print A
와 print(A)
간 의 차 이 는 무시 할 수 있 기 때문에 가 독성 에 영향 을 주지 않 는 다.그리고 우리 가 print
문 구 를 함수 로 완전히 바 꿀 수 있 기 때문에 Python 언어의 기능 성에 도 손실 이 없다.이것 이 바로 print
를 함수 로 바 꾼 이유 다.아래 QR 코드 를 스 캔 하여 제 공식 번호 인 '프로 그래 밍 파' 에 관심 을 가 져 주 셔 서 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.