Python 2.7에서 인쇄된 괄호가 자발적인 이유는 무엇입니까?
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
Python 2.7에서?
Python 2.x에서print
는 사실 특수문이지 함수가 아닙니다*.
이것이 또한 다음과 같이 사용할 수 없는 이유입니다.lambda x: print x
참고:(expr)
Tuple을 생성하지 않습니다(결과적으로 생성됨).expr
), 그러나,
그렇다. 이것은 아마도 사이의 혼란을 초래할 것이다.print (x)
그리고.print (x, y)
Python 2.7에서
(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
Python 2.x의 특수 구문문/문법 구조입니다. 괄호 없이는,
는 특별한 방식으로 - 그리고 튜플을 만들지 않습니다.이 특별한 대우는print
문을 사용하면 후행이 있는 경우 다르게 동작할 수 있습니다.,
그렇지 않으면.
해피 코딩.
*이것print
Python 2의 동작은 Python 3의 동작으로 변경할 수 있습니다.
from __future__ import print_function
이 모든 것은 매우 간단하며 상위 또는 하위 호환성과는 아무런 관련이 없습니다.
의 일반적인 형식은 다음과 같습니다.print
버전 3 이전의 모든 파이썬 버전의 문은 다음과 같습니다.
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'"를 의미합니다.그것의 문제는 인쇄가 기능인 것처럼 행동하는 것이 유혹적이었고, 파이썬 문법은 그것에 대해 모호했습니다.(a,b)
다음을 포함하는 튜플입니다.a
그리고.b
그렇지만foo(a,b)
두 인수의 함수에 대한 호출입니다.
그래서 그들은 프로그램을 덜 모호하고 더 규칙적으로 만들기 위해 3에 대해 호환되지 않는 변경을 했습니다.
(실제로 2.7은 2.6과 동일하게 동작한다고 생각하지만 확실하지는 않습니다.)
언급URL : https://stackoverflow.com/questions/6182964/why-is-parenthesis-in-print-voluntary-in-python-2-7
'programing' 카테고리의 다른 글
Azure 가상 시스템의 도메인 컨트롤러로 사용되는 Azure Active Directory (0) | 2023.05.01 |
---|---|
Android Studio 프로젝트 구조(v.s. Eclipse 프로젝트 구조) (0) | 2023.05.01 |
활성 레코드, 레일 및 포스트그레스를 사용하여 여러 중복 필드가 있는 행 찾기 (0) | 2023.05.01 |
MVVM을 사용하여 "창 닫기" 명령 구현 (0) | 2023.05.01 |
Postgre에서 기존 *.sql 파일을 가져오는 방법SQL 8.4? (0) | 2023.05.01 |