Python 2.x와 3.x 버전의 차이점
Python 3.0 버전은 Python 3000, 줄여서 Py3k라고도 합니다. 이는 이전 버전의 Python에 비해 주요 업그레이드입니다.
Python 3.0은 너무 많은 부담을 주지 않기 위해 하위 호환성을 염두에 두고 설계되지 않았습니다.
이전 Python 버전용으로 설계된 많은 프로그램은 Python 3.0에서 제대로 실행되지 않습니다.
기존 프로그램을 관리하기 위해 Python 2.6은 기본적으로 Python 2.x의 구문과 라이브러리를 사용하는 전환 버전입니다. 또한 Python 3.0으로의 마이그레이션을 고려하고 일부 Python 3.0의 사용을 허용합니다. 구문과 기능.
새로운 Python 프로그램에서는 Python 3.0 버전 구문을 사용하는 것이 좋습니다.
실행 환경이 Python 3.0을 설치할 수 없거나 프로그램 자체가 Python 3.0을 지원하지 않는 타사 라이브러리를 사용하지 않는 한. 현재 Python 3.0을 지원하지 않는 타사 라이브러리에는 Twisted, py2exe, PIL 등이 포함됩니다.
대부분의 타사 라이브러리는 Python 3.0 버전과 호환되도록 열심히 노력하고 있습니다. Python 3.0을 바로 사용할 수 없더라도 Python 3.0과 호환되는 프로그램을 작성한 후 Python 2.6 또는 Python 2.7을 사용하여 실행하는 것이 좋습니다.
주요 변경 사항
Python 3.0의 변경 사항은 주로 다음과 같습니다.
print 문이 사라지고 print() 함수로 대체되었습니다. Python 2.6 및 Python 2.7은 이러한 형식의 인쇄 구문을 부분적으로 지원합니다. Python 2.6과 Python 2.7에서는 다음 세 가지 형식이 동일합니다.
print "fish" print ("fish") #注意print后面有个空格 print("fish") #print()不能带有任何其它参数
그러나 Python 2.6은 실제로 새로운 print() 구문을 지원합니다.
from __future__ import print_function print("fish", "panda", sep=', ')
New str 범주는 다음을 나타냅니다. Python 2.x 버전의 유니코드 범주에 해당하는 유니코드 문자열입니다. 바이트 시퀀스는 b"abc"와 유사한 구문으로 표시되며 Python 2.x의 str 클래스와 동일한 bytes 클래스로 표시됩니다.
두 범주는 더 이상 암시적으로 자동 변환될 수 없으므로 "fish"+b"panda"는 Python 3.x에서 오류입니다. 올바른 작성 방법은 "fish"+b"panda".decode("utf-8")입니다. Python 2.6은 다음을 통해 바이트 시퀀스를 유니코드 문자열로 자동 인식할 수 있습니다.
from __future__ import unicode_literals print(repr("fish"))
나누기 연산자 "/"는 Python 3.x에서 항상 부동 소수점 숫자를 반환합니다. Python 2.6에서는 피제수와 제수가 정수인지 판단합니다. 정수인 경우 정수 값을 반환합니다. 이는 정수 나누기와 같습니다. 부동 소수점 숫자인 경우 부동 소수점 값을 반환합니다. <… 여러 범주의 예외를 동시에 포착하려면 Except (exc1, ex2) 구문을 var로 사용하십시오. Python 2.6은 이미 두 구문을 모두 지원합니다.
새로운 쓰기 방식: {1,2,3,4}. {}는 여전히 빈 사전(dict)을 나타냅니다.
from __future__ import division print(3/2)
Set Comprehensions {expr1 for x in stuff}와 동일합니다. 이 구문은 다음과 같습니다.
8진수는 0o777로 작성해야 합니다. 원래 형식 0777은 사용할 수 없습니다. 2진수는 0b111로 작성해야 합니다. 정수를 이진 문자열로 변환하는 새로운 bin() 함수가 추가되었습니다. Python 2.6은 이미 두 구문을 모두 지원합니다.result={} for k, v in d.items(): result[expr1]=expr2 return result
dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()은 더 이상 목록을 반환하지 않고 반복자를 반환합니다.
result = set() for x in stuff: result.add(expr1) return result
int 및 long 유형을 병합합니다.
여러 모듈의 이름이 변경되었습니다(PEP8에 따라):
def sendMail(from_: str, to: str, title: str, body: str) -> bool: pass