Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 2.x와 Python 3.x의 차이점은 무엇입니까?

<시간/>

코딩 커뮤니티에서는 Python 2.x 또는 Python 3.x 중 어떤 python 버전이 가장 배울 수 있는지에 대한 논쟁이 항상 있습니다.

다음은 pyton 2.x와 python 3.x의 주요 차이점입니다.

1. 인쇄 기능

python 2.x에서 "print"는 명령문으로 처리되고 python 3.x는 "print"를 함수로 명시적으로 처리합니다. 이것은 우리가 표준 방식으로 함수 괄호에 인쇄 안의 항목을 전달해야 함을 의미합니다. 그렇지 않으면 구문 오류가 발생합니다.

#Python 2.7print '파이썬', python_version()print 'Hello, World!'print('Hello, World!')print "text",; '여기에 추가 텍스트' 인쇄

출력

Python 2.7.6Hello, World!Hello, World!text 여기에 텍스트를 더 인쇄합니다.Python 3import sysprint("Python 버전은 %s.%s.%s입니다." %sys.version_info[:3])print('Hello, World!')print("일부 텍스트,", end="")print('여기에 텍스트가 더 있습니다.')

출력

Python 버전은 3.6.1Hello, World!some text,some more text here>>> print "Hello" 구문 오류:'print' 호출에 괄호가 없습니다.

2. 정수 나누기

Python 2는 소수점 이하 자릿수 없이 입력하는 숫자를 정수로 처리하므로 나누기 중에 예기치 않은 결과가 발생할 수 있습니다. 예를 들어, Python 2 코드에서 표현식 3 / 2를 입력하면 평가 결과는 예상한 대로 1.5가 아니라 1이 됩니다. Python 3 코드에서 x만 사용하는 대신 float(x)를 사용하거나(코드베이스를 Python 2로 포트하는 경우) Python 2 스크립트에서 from __future__ import division을 사용하는 것이 좋습니다.

#파이썬 2

print '파이썬', python_version()print '3 / 2 =', 3 / 2print '3 // 2 =', 3 // 2print '3 / 2.0 =', 3 / 2.0print '3 // 2.0 =', 3 // 2.0

출력

파이썬 2.7.63 / 2 =13 // 2 =13 / 2.0 =1.53 // 2.0 =1.0

#파이썬 3.6.1

import sysprint('파이썬 %s.%s.%s' %sys.version_info[:3])print('3 / 2 =', 3 / 2)print('3 // 2 =', 3 // 2)print('3 / 2.0 =', 3 / 2.0)print('3 // 2.0 =', 3 // 2.0)

출력

파이썬 3.6.13 / 2 =1.53 // 2 =13 / 2.0 =1.53 // 2.0 =1.0

3. 유니코드 문자열

기본적으로 Python 3은 문자열을 유니코드로 저장하지만 Python 2는 문자열을 유니코드로 저장하려면 문자열에 "u"를 표시해야 합니다. 유니코드 문자열은 이모티콘과 표준 로마자 및 숫자뿐만 아니라 외국어의 문자를 저장할 수 있기 때문에 Python 2의 기본값인 ASCII 문자열보다 다재다능합니다.

#파이썬 2

>>> print type(unicode('이것은 python3 str type과 비슷합니다'))>>> print type(b'byte type은 존재하지 않습니다')>>> 인쇄 '그들은 정말' + b' 같음'그들은 정말 똑같습니다

#파이썬 3

import sysprint('Python %s.%s.%s' %sys.version_info[:3])print('문자열은 이제 utf-8 \u03BCnico\u0394é입니다!')print('파이썬 %s.% s.%s' %sys.version_info[:3], end="")print(' has', type(b' 데이터 저장을 위한 바이트 수'))print('파이썬 %s.%s.%s' % sys.version_info[:3], end="")print('도 있습니다', type(bytearray(b'bytearrays')))

출력

Python 3.6.1문자열은 이제 utf-8 μnicoΔé입니다!Python 3.6.1에는 Python 3.6.1에도 
가 있습니다.

"string" + b"bytes of data"는 오류를 통해 처리됩니다.

>>> print('그들은 정말' + b' 동일')Traceback(가장 최근 호출 마지막):File "", 줄 1, in print('그들은 정말 ' + b' 동일')TypeError:바이트가 아니라 str이어야 합니다.

4. 예외 발생

Python 3에서는 예외를 발생시키기 위해 다른 구문이 필요합니다. 사용자에게 오류 메시지를 출력하려면 −

구문을 사용해야 합니다.
 IOError("오류 메시지") 발생

위의 구문은 python 2와 python 3에서 모두 작동합니다.

그러나 다음 코드는 python 2에서만 작동하며 python 3에서는 작동하지 않습니다.

IOError, "귀하의 오류 메시지" 발생

5. 이해 루프 변수 나열

파이썬 2에서 "for 루프"에서 반복되는 변수를 전역 변수와 같은 이름으로 지정하면 전역 변수의 값이 변경될 수 있습니다. 일반적으로 이는 우리가 원하지 않습니다. 이 문제는 Python 3에서 수정되었으므로 "for 루프"에서 제어 변수에 이미 사용한 변수 이름을 코드의 나머지 부분에 있는 변수 값이 유출되거나 엉망이 되는 것에 대해 걱정하지 않고 사용할 수 있습니다.

#Python 2print '파이썬', python_version()i =1print 'before:i =', iprint 'comprehension:', [i for i in range(5)]print 'after:i =', i 

출력

Python 2.7.6이전:i =1comprehension:[0, 1, 2, 3, 4]이후:i =4

#파이썬 3

import sysprint('Python %s.%s.%s' %sys.version_info[:3])i =1print('before:i =', i)print('comprehension:', [i for i 범위(5)])print('이후:i =', i)

출력

Python 3.6.1before:i =1comprehension:[0, 1, 2, 3, 4]after:i =1