Python 3의 새로운 기능
__future__ 모듈
Python 3.x는 Python 2의 내장 __future__ 모듈을 통해 가져올 수있는 Python 2 호환되지 않는 키워드 및 기능을 도입했습니다. 코드에 대한 Python 3.x 지원을 계획중인 경우 __future__ 가져 오기를 사용하는 것이 좋습니다.
예를 들어 Python 2에서 Python 3.x의 정수 나누기 동작을 원하면 다음 import 문을 추가합니다.
from __future__ import division
인쇄 기능
Python 3에서 가장 주목할 만하고 널리 알려진 변경 사항은 print기능이 사용됩니다. 인쇄 기능에 괄호 ()를 사용하는 것은 이제 필수입니다. Python 2에서는 선택 사항이었습니다.
print "Hello World" #is acceptable in Python 2
print ("Hello World") # in Python 3, print must be followed by ()
print () 함수는 기본적으로 끝에 새 줄을 삽입합니다. Python 2에서는 끝에 ','를 넣어 억제 할 수 있습니다. Python 3에서 "end = ''"는 개행 대신 공백을 추가합니다.
print x, # Trailing comma suppresses newline in Python 2
print(x, end=" ") # Appends a space instead of a newline in Python 3
키보드에서 입력 읽기
Python 2에는 두 가지 버전의 입력 함수가 있습니다. input() 과 raw_input(). input () 함수는 수신 된 데이터가 따옴표 ''또는 ""에 포함 된 경우 문자열로 처리하고, 그렇지 않은 경우 데이터는 숫자로 처리됩니다.
Python 3에서 raw_input () 함수는 더 이상 사용되지 않습니다. 또한 수신 된 데이터는 항상 문자열로 처리됩니다.
In Python 2
>>> x = input('something:')
something:10 #entered data is treated as number
>>> x
10
>>> x = input('something:')
something:'10' #entered data is treated as string
>>> x
'10'
>>> x = raw_input("something:")
something:10 #entered data is treated as string even without ''
>>> x
'10'
>>> x = raw_input("something:")
something:'10' #entered data treated as string including ''
>>> x
"'10'"
In Python 3
>>> x = input("something:")
something:10
>>> x
'10'
>>> x = input("something:")
something:'10' #entered data treated as string with or without ''
>>> x
"'10'"
>>> x = raw_input("something:") # will result NameError
Traceback (most recent call last):
File "<pyshell#3>", line 1, in
<module>
x = raw_input("something:")
NameError: name 'raw_input' is not defined
정수 나눗셈
Python 2에서 두 정수를 나눈 결과는 가장 가까운 정수로 반올림됩니다. 결과적으로 3/2는 1을 표시합니다. 부동 소수점 나눗셈을 얻으려면 분자 또는 분모를 명시 적으로 float로 사용해야합니다. 따라서 3.0 / 2 또는 3 / 2.0 또는 3.0 / 2.0은 1.5가됩니다.
Python 3은 기본적으로 3/2를 1.5로 평가하며, 이는 새로운 프로그래머에게 더 직관적입니다.
유니 코드 표현
Python 2에서는 문자열을 유니 코드로 저장하려면 au로 표시해야합니다.
Python 3은 기본적으로 문자열을 유니 코드로 저장합니다. 유니 코드 (utf-8) 문자열과 2 바이트 클래스 : 바이트 및 바이트 배열이 있습니다.
xrange () 함수 제거
Python 2에서 range ()는 목록을 반환하고 xrange ()는 필요할 때 범위의 항목 만 생성하여 메모리를 절약하는 객체를 반환합니다.
Python 3에서는 range () 함수가 제거되고 xrange ()는 range ()로 이름이 변경되었습니다. 또한 range () 객체는 Python 3.2 이상에서 슬라이싱을 지원합니다.
예외를 일으키다
Python 2는 'old'와 'new'구문의 두 표기법을 모두 허용합니다. Python 3은 예외 인수를 괄호로 묶지 않으면 SyntaxError를 발생시킵니다.
raise IOError, "file error" #This is accepted in Python 2
raise IOError("file error") #This is also accepted in Python 2
raise IOError, "file error" #syntax error is raised in Python 3
raise IOError("file error") #this is the recommended syntax in Python 3
예외의 인수
Python 3에서 예외에 대한 인수는 'as'키워드로 선언해야합니다.
except Myerror, err: # In Python2
except Myerror as err: #In Python 3
next () 함수 및 .next () 메서드
Python 2에서는 생성기 객체의 메서드 인 next ()가 허용됩니다. Python 2에서는 생성기 객체를 반복하는 next () 함수도 허용됩니다. 그러나 Python 3에서는 next (0 생성기 메서드가 중단되고AttributeError.
gen = (letter for letter in 'Hello World') # creates generator object
next(my_generator) #allowed in Python 2 and Python 3
my_generator.next() #allowed in Python 2. raises AttributeError in Python 3
2to3 유틸리티
Python 3 인터프리터와 함께 2to3.py 스크립트는 일반적으로 tools / scripts 폴더에 설치됩니다. Python 2.x 소스 코드를 읽고 일련의 수정 프로그램을 적용하여 유효한 Python 3.x 코드로 변환합니다.
Here is a sample Python 2 code (area.py):
def area(x,y = 3.14):
a = y*x*x
print a
return a
a = area(10)
print "area",a
To convert into Python 3 version:
$2to3 -w area.py
Converted code :
def area(x,y = 3.14): # formal parameters
a = y*x*x
print (a)
return a
a = area(10)
print("area",a)