Python 2.7에서는 다음 두 가지가 모두 동일합니다.
print("Hello, World!") # Prints "Hello, World!"
print "Hello, World!" # Prints "Hello, World!"
그러나 다음은
print("Hello,", "World!") # Prints the tuple: ("Hello,", "World!")
print "Hello,", "World!" # Prints the words "Hello, World!"
Python 3.x에서 괄호 print
는 필수이므로 기본적으로 함수로 만들지 만 2.7에서는 둘 다 다른 결과로 작동합니다. print
파이썬 2.7에서 또 무엇을 알아야 합니까?
답변
Python 2.x print
에서 실제로는 함수가 아닌 특수한 문입니다 *.
이것이 다음과 같이 사용할 수없는 이유이기도합니다. lambda x: print x
참고 (expr)
(이 결과 튜플을 생성하지 않습니다 expr
), 그러나 ,
않습니다. 이로 인해 Python 2.7 print (x)
과 사이에 혼란이 발생할 수 있습니다.print (x, y)
(1) # 1 -- no tuple Mister!
(1,) # (1,)
(1,2) # (1, 2)
1,2 # 1 2 -- no tuple and no parenthesis :) [See below for print caveat.]
그러나, 이후는 print
A는 특수 구문 문 / 문법 구조 다음 파이썬 2.x에서의 그것이 취급, 괄호없이, ,
그리고 – ‘특별한 방식이야 하지 않는 튜플을 만듭니다. 이 print
명령문 의 특수 처리를 통해 후행이 있는지 여부에 따라 다르게 작동 할 수 있습니다 ,
.
즐거운 코딩입니다.
* print
Python 2 의이 동작은 Python 3의 동작으로 변경할 수 있습니다.
from __future__ import print_function
답변
모두 매우 간단하며 순방향 또는 역방향 호환성과 관련이 없습니다.
print
버전 3 이전의 모든 Python 버전에서 명령문 의 일반적인 형식 은 다음과 같습니다.
print expr1, expr2, ... exprn
(각식이 차례로 평가되고 문자열로 변환되고 그 사이에 공백이 표시됩니다.)
그러나 식을 괄호로 묶는 것은 여전히 같은 식임을 기억하십시오.
따라서 이것을 다음과 같이 작성할 수도 있습니다.
print (expr1), (expr2), ... (expr3)
이것은 함수 호출과 관련이 없습니다.
답변
여기 UTF-8과 관련하여 흥미로운 부작용이 있습니다.
>> greek = dict( dog="σκύλος", cat="γάτα" )
>> print greek['dog'], greek['cat']
σκύλος γάτα
>> print (greek['dog'], greek['cat'])
('\xcf\x83\xce\xba\xcf\x8d\xce\xbb\xce\xbf\xcf\x82', '\xce\xb3\xce\xac\xcf\x84\xce\xb1')
마지막 인쇄는 16 진수 바이트 값을 가진 튜플입니다.
답변
기본적으로 Python 3 이전의 Python에서 print는 인수로 받으면 모든 문자열을 인쇄하는 특수 문이었습니다. 그래서 print "foo","bar"
단순히 “인쇄 ’foo’다음에 ‘bar'”를 의미했습니다. 그것의 문제는 마치 print가 함수 인 것처럼 행동하고 싶은 유혹이었고, 파이썬 문법은 그것에 대해 모호합니다. 왜냐하면 (a,b)
튜플이 포함 a
하고 b
있지만 foo(a,b)
두 인수의 함수에 대한 호출이기 때문입니다.
그래서 그들은 프로그램을 덜 모호하고 더 규칙적으로 만들기 위해 3과 호환되지 않는 변경을했습니다.
(사실 2.7이 2.6과 같이 작동한다고 생각하지만 확실하지 않습니다.)