>  기사  >  백엔드 개발  >  [파이썬 튜토리얼] Python2.x와 3.x 버전의 차이점

[파이썬 튜토리얼] Python2.x와 3.x 버전의 차이점

黄舟
黄舟원래의
2016-12-24 15:44:451379검색

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에서는 피제수와 제수가 정수인지 판단합니다. 정수인 경우 정수 값을 반환합니다. 이는 정수 나누기와 같습니다. 부동 소수점 숫자인 경우 부동 소수점 값을 반환합니다.

새로운 쓰기 방식: {1,2,3,4}. {}는 여전히 빈 사전(dict)을 나타냅니다.

from __future__ import division
print(3/2)
Dictionary comprehensions {expr1: expr2 for k, v in d}, 이 구문은

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
두 객체 사이에 잘 ​​정의된 의미 있는 순서가 없는 경우. 95ec6993dc754240360e28e0de8de30a, d2e24fbfa3a7d998970671c0359d3643=를 사용하여 비교하면 예외가 발생합니다. 예를 들어, 1 < ""는 Python 2.6에서 True를 반환하지만 Python 3.0에서는 예외를 발생시킵니다. 이제 cmp(), instance.__cmp__() 함수가 제거되었습니다.

함수의 매개변수와 반환값에 주석을 달 수 있습니다. 이 기능을 통해 IDE는 소스 코드에 대한 보다 심층적인 분석을 수행할 수 있습니다. 예를 들어 매개변수에 카테고리 정보를 추가합니다.

int 및 long 유형을 병합합니다.

여러 모듈의 이름이 변경되었습니다(PEP8에 따라):

def sendMail(from_: str, to: str, title: str, body: str) -> bool:
    pass

이전 이름

새 이름

_winreg winreg

ConfigParser configparser

copy_reg copyreg

큐 큐

SocketServer 소켓 서버

repr reprlib

StringIO 모듈은 이제 새로운 io 모듈에 병합되었습니다. 신규, md5, gopherlib 및 기타 모듈이 삭제되었습니다. Python 2.6은 이미 새로운 io 모듈을 지원합니다.

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib가 http 패키지에 병합됩니다.

exec 문이 취소되고 exec() 함수만 남습니다. Python 2.6은 이미 exec() 함수를 지원합니다.

위 내용은 Python 2.x와 3.x 버전의 차이점에 대한 [python tutorial] 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요. !

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.