기금넷 공식사이트 - 금 선물 - python3.6과 python2.7의 차이점
python3.6과 python2.7의 차이점
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 문이 사라지고 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_functionprint("fish", "panda", sep= ', ' )
유니코드
Python 2에는 ASCII str() 유형이 있으며, unicode()는 바이트 유형이 아닌 별개입니다.
이제 Python 3에서는 마침내 유니코드(utf-8) 문자열과 바이트 클래스인 byte 및 bytearrays를 갖게 되었습니다.
Python3.X 소스 코드 파일은 기본적으로 utf-8 인코딩을 사용하므로 다음 코드가 합법적입니다:
gt ;gt;print(China)china
Python 2.x
gt;gt;str = "나는 베이징 천안문을 좋아합니다"gt;gt;str'Me? ±Beijing?¤?anné?¨'gt; gt;gt; str = u"나는 베이징 천안문을 사랑합니다"gt;gt;gt; stru'나는 베이징 천안문을 사랑합니다'
파이썬 3.x
gt;gt;gt; str = "베이징 천안문을 사랑합니다"gt;gt;gt; str'베이징 천안문을 사랑합니다'
나눗셈 연산
Python 파이썬의 나눗셈은 비교하면 매우 고급입니다. 다른 언어에도 적용되며 매우 복잡한 규칙이 있습니다.
Python의 나누기에는 /와 //라는 두 개의 연산자가 있습니다.
우선 /division은 다음과 같습니다.
Python 2.x에서 /division은 우리에게 익숙한 대부분의 언어와 같습니다. Java 및 C와 같은 정수 나누기의 결과는 정수이며, 부동 소수점 나누기는 소수점 부분을 유지하고 부동 소수점 숫자 결과를 얻습니다.
파이썬 3.x/division에서는 더 이상 정수를 나누는 경우 결과가 부동 소수점 숫자가 됩니다.
파이썬 2.x:
gt;gt;gt;1/20gt;gt;gt;1.0/2.00.5
파이썬 3.x:
gt; gt; 1/20.5
이 분할을 바닥 분할이라고 하며 분할 결과에 대해 자동으로 바닥 연산이 수행됩니다. . Python 2에서 .x는 Python 3.x와 일치합니다.
파이썬 2.x:
gt;gt;gt; -1 // 2-1
파이썬 3.x:
gt; gt; -1 // 2-1
소수 부분은 버리지 않지만 소수 부분을 가로채려면 다음을 사용해야 합니다. 수학 모듈의 trunc 함수
python 3.x:
gt;gt;gt; import mathgt;gt;gt; ;gt; math.trunc( -1 / 2)0
예외
Python 3에서는 예외 처리도 약간 변경되었습니다. Python 3에서는 이제 as 키워드를 사용합니다.
예외를 포착하는 구문이 ?exc, var?에서 ?exc as var로 변경되었습니다.
여러 범주의 예외를 동시에 캡처하려면 Except (exc1, ex2) 구문을 var로 사용하세요. Python 2.6은 이미 두 구문을 모두 지원합니다.
1. 2.x 시대에는 모든 유형의 객체를 직접 던질 수 있습니다. 3.x 시대에는 BaseException을 상속받은 객체만 던질 수 있습니다.
2. 2.x raise 문은 쉼표를 사용하여 던져진 객체 유형과 매개변수를 구분합니다. 3.x에서는 이 이상한 쓰기 방법을 취소하고 생성자를 직접 호출하여 객체를 던집니다.
2.x 시대에는 코드의 예외가 프로그램 오류를 나타낼 뿐만 아니라 일반 제어 구조가 수행해야 하는 작업도 수행하는 경우가 많습니다. 3. 구체적으로 예외 포착 문은 다음과 같은 경우에만 사용할 수 있습니다. 오류가 발생합니다.
xrange
Python 2에서는 반복 가능한 객체를 생성하기 위해 xrange()를 사용하는 것이 매우 일반적입니다. 예: for 루프 또는 목록/설정/사전 이해.
이는 생성기와 매우 유사하게 동작합니다(예: "지연 평가"). 하지만 이 xrange-iterable은 무한합니다. 즉, 무한히 탐색할 수 있다는 의미입니다.
지연 평가로 인해 xrange() 함수는 한 번만 반복해야 하는 경우(예: for 루프) range()보다 빠릅니다. 하지만 한 번 반복하는 것보다 여러 번 반복하는 것은 생성기가 매번 처음부터 시작되기 때문에 권장되지 않습니다.
Python 3에서 range()는 xrange()처럼 구현되어 전용 xrange() 함수가 더 이상 존재하지 않습니다(Python 3에서는 xrange()가 명명된 예외를 발생시킵니다).
import timeitn = 10000def test_range(n): return for i in range(n): passdef test_xrange(n): for i in xrange(n): pass
Python 2print 'Python', python_version()print ' timing range()'timeit test_range(n)print ' timing xrange()'timeit test_xrange(n)Python 2.7.6timing range()1000 루프, 최고 3: 최적화 xrange()1000 루프당 433?s, 최고 3: 루프당 350?s
Python 3print('Python', python_version())print(' timing range()')timeit test_range(n)Python 3.4.1timing range()1000 루프, 최고 3개: 루프당 520?s
print(xrange(10))--------------- -- ------------------------------------------------ --NameError Traceback(최근 호출 마지막)lt;ipython-input-5-5d8f9b79ea70gt; in lt;modulegt;()----gt; 1 print(xrange(10))NameError: 이름 'xrange'가 정의되지 않았습니다.
8진수 리터럴 표현
8진수는 0o777로 작성해야 합니다. 원래 형식인 0777은 사용할 수 없으며 2진수는 0b111로 작성해야 합니다.
정수를 이진 문자열로 변환하는 새로운 bin() 함수가 추가되었습니다. Python 2.6은 이미 두 구문을 모두 지원합니다.
Python 3.x에서는 8진수 리터럴을 나타내는 방법은 0o1000 한 가지뿐입니다.
python 2. SyntaxError:valid tokengt;gt;gt; 0o1000512
불균등 연산자
Python 2.x에서 불평등을 작성하는 방법에는 두 가지가 있습니다!= lt;gt;
Python 3.x에서는 gt;가 제거되었습니다. 다행히도 lt;를 사용한 적이 없습니다. >
repr 표현식 ``
Python 2.x의 백틱 ``은 repr 함수의 역할과 동일합니다.
이 작성 방법은 Python 3에서 제거되었습니다. .x이며, repr 함수만 사용하도록 허용됩니다. 이는 코드를 더 명확하게 보이도록 하기 위한 것입니까? 그러나 나는 repr을 사용할 기회가 거의 없다고 생각합니다. 일반적으로 디버깅할 때만 사용됩니다. 대부분의 경우 str 함수는 문자열로 개체를 설명하는 데 사용됩니다.
def sendMail(from_: str, to: str, title: str, body: str) -gt; bool: pass
여러 모듈의 이름이 변경되었습니다(PEP8에 따라)
이전 이름
새 이름
_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() 함수를 지원합니다.
5. 데이터 유형
1) Py3.X는 long 유형을 제거했으며 이제 정수 유형(int)만 있지만 2처럼 동작합니다.
2) 버전 2.X의 옥텟 문자열에 해당하는 새로운 바이트 유형이 추가되었습니다. 바이트 리터럴을 정의하는 방법은 다음과 같습니다. gt; ;gt; type(b)lt; type 'bytes'gt;
Str 객체와 bytes 객체는 .encode() (str -gt; bytes) 또는 .decode() (bytes -gt; str) 메서드를 서로 변환합니다. gt; gt; s'china'gt;
3) dict 반환 반복자의 .keys(), .items 및 .values() 메서드는 이전 iterkeys() 및 기타 함수는 폐기되었습니다. 또한 dict.has_key()도 제거되었습니다. 이를 in으로 바꾸세요.