왜 print 는 Python 3 에서 함수 가 되 었 습 니까?

본 고 는 프로 그래 밍 파 의 위 챗 공식 번호 에 선발 되 었 다.
  • 원작 자: Brett Cannon
  • 원문 링크:http://www.snarky.ca/why-print-became-a-function-in-python-3
  • 번역자: EarlGrey @ 프로 그래 밍 파
  • Python 2 에서 print 는 하나의 문장 (statement) 입 니 다.파 이 썬 3 에서 함수 (function) 로 바 뀌 었 다.많은 Python 사용자 들 이 왜 Python 3 이 print 를 함수 로 만 들 었 는 지 물 어 봅 니 다.이 글 은 Python 핵심 개발 자 Brett Cannon 의 설명 이다.
    올해 초 Python 이 Github 으로 이전 하기 로 결정 한 것 은 Brett Cannon 이 Python 커 뮤 니 티 의 의견 을 구 한 후에 나 온 것 이다.그 는 이것 에 대해 서도 해명 을 했다.
    print 문장 과 print 함수 의 차이
    print 구문
    Python 2 에서 print 문장의 가장 간단 한 사용 형식 은 print A 인 데 이것 은 실 행 된 것 과 같다 sys.stdout.write(str(A) + '
    ')
    .쉼표 를 구분자 로 하여 추가 매개 변수 (argument) 를 전달 하면 이 매개 변 수 는 str() 함수 로 전 달 됩 니 다. 마지막 으로 인쇄 할 때 매개 변수 간 에 한 칸 씩 비어 있 습 니 다.예 를 들 어 print A, B, Csys.stdout.write(' '.join(map(str, [A, B, C])) + '
    ')
    에 해당 한다.print 문장의 마지막 에 쉼표 를 추가 하면 단행자
    를 추가 하지 않 습 니 다. 즉, print Asys.stdout.write(str(A)) 에 해당 합 니 다.
    2.0 버 전부터 Python 은 print >> 구문 의 최종 출력 문자열 을 재 설정 print 하 는 문법 을 도입 했다.예 를 들 어 print >> output, Aoutput.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 Aprint(A) 간 의 차 이 는 무시 할 수 있 기 때문에 가 독성 에 영향 을 주지 않 는 다.그리고 우리 가 print 문 구 를 함수 로 완전히 바 꿀 수 있 기 때문에 Python 언어의 기능 성에 도 손실 이 없다.이것 이 바로 print 를 함수 로 바 꾼 이유 다.
    아래 QR 코드 를 스 캔 하여 제 공식 번호 인 '프로 그래 밍 파' 에 관심 을 가 져 주 셔 서 감사합니다.

    좋은 웹페이지 즐겨찾기