1. 성능
Py3.0은 Py2.5보다 30% 느리게 pystone 벤치마크를 실행합니다. Guido는 Py3.0이 최적화를 위한 큰 여지를 갖고 있으며 문자열 및 정수 연산에서 좋은 최적화 결과를 얻을 수 있다고 믿습니다.
2. 인코딩
Py3.0 소스 코드 파일은 기본적으로 utf-8 인코딩을 사용하므로 다음 코드가 합법적입니다.
>> 중국 = '중국'
>>> print(중국)
china
3. 문법
1) 을 삭제하고 !=
로 모두 교체2) ``를 제거하고 대신 repr()을 사용하세요
3) as 및 with 키워드와 True, False, None을 추가합니다
4) 정수 나누기 반환 부동 소수점 숫자 , 정수 결과를 얻으려면 //
5)를 사용하여 로컬이 아닌 문을 추가하세요. noclocal x를 사용하면 주변(비전역) 변수를 직접 할당할 수 있습니다
6) print 문을 제거하고 print() 함수를 추가하여 동일한 기능을 구현합니다. exec 문도 exec()
으로 변경되었습니다. 4. 함수
1) print 문은 print() 함수로 대체되었습니다. 이전 print Special 구문을 대체하는 데 사용됩니다. 예:
기존: print "The Answer is", 2*2
New: print("The Answer is", 2*2)
Old: print x , #줄 바꿈을 금지하려면 끝에 쉼표를 사용하세요
New: print(x, end=" ") # 줄을 바꾸려면 공백을 사용하세요
Old: print # 새 줄을 출력합니다
신규: print() # 새 줄 출력
기존: print >>sys.stderr, "fatal error"
신규: print("fatal error", file=sys .stderr)
기존: print (x, y) # 출력 담당자((x, y))
신규: print((x, y)) # print(x, y)!
2) x
3) 입력 기능 변경 현재:
기존:
guess = int(raw_input('Enter an 정수 : ')) #키보드 입력을 읽는 방법
새로운 기능:
guess = int(input('정수 입력: '))
4) 튜플 매개변수 압축 해제를 제거합니다. def(a, (b, c)): 다음과 같이 함수를 정의할 수 없습니다.
5) 새로운 8진수 단어 변수인 oct() 함수는 그에 따라 수정됩니다. 2. >3.0의 방법은 다음과 같습니다:
>>> 0666
SyntaxError: 잘못된 토큰(, 1행)
>>> 0o666
438
>>> oct(438)
'0o666'
6) 바이너리 리터럴 및 bin() 함수 추가
>>> bin (438 )
'0b110110110'
>>> _438 = '0b110110110'
>> _438
'0b110110110'
7 ) 확장된 반복 가능 언패킹. Py3.0에서 a, b, *rest = seq 및 *rest, a = seq는 유효하며 두 가지 점만 필요합니다. Rest는 목록 객체이고 seq는 반복 가능합니다
8) 새로운 super() , 더 이상 super()
>>> class C(object):
def __init__(self, a):
print('C)에 매개변수를 전달할 수 없습니다. ', a)
>>> class D(C):
def __init(self, a):
super().__init__(a) #super 호출 () 매개변수 없음
>>> D(8)
C 8
9) 새로운 메타클래스 구문class Foo(*bases, **kwds):pass10)는 클래스 데코레이터를 지원합니다. 사용법은 함수 데코레이터와 동일합니다:<__main__.d>>>> def foo(cls_a):
def print_func(self):
print('Hello, world! ')
cls_a.print = print_func
return cls_a
>>> @foo
class C(object):
pass
>>> C().print()
안녕하세요.
클래스 데코레이터를 사용하면 사향 고양이를 왕자로 바꾸는 트릭을 수행할 수 있습니다. 자세한 내용은 PEP 3129를 참조하세요
5. 문자열과 바이트 문자열
1) 이제 문자열은 str이라는 한 종류만 있지만 2와 거의 동일합니다. x 버전의 유니코드.
2) 바이트 문자열은 "Data Type" 2번 항목을 참고하세요.
6. Data Type
1) Py3.0에서는 long type이 제거되었습니다. 이제 정수 유형은 int 하나만 있지만 버전 2에서는 long
처럼 동작합니다. 측정 방법은 다음과 같습니다.
>>> b = b'china'
>>> type(b)
3) str 객체와 bytes 객체는 .encode()를 사용하여 서로 변환할 수 있습니다(str -> bytes). 또는 .decode() (바이트 -> str) 메서드 >>> s = b.decode()>>> s'china'
>>> b1 = s.encode()
>>> b1
b' china'
4) 1. .keys(), . dict 반환 반복자의 항목 및 .values() 메서드는 이전 iterkeys() 및 기타 함수는 폐기되었습니다. dict.has_key()도 제거되었습니다.
7. 7. 객체 지향
1) 1) 추상 기본 클래스(ABC)를 도입합니다.
2) 컨테이너 클래스와 반복자 클래스는 ABC이므로 Py2.5
>>> 가져오기 컬렉션
>>보다 cellections 모듈에 더 많은 유형이 있습니다. > print('n'.join(dir(collections)))
호출 가능
컨테이너
해시 가능
ItemsView
반복 가능
반복자
KeysView
Mapping
MappingView
MutableMapping
MutableSequence
MutableSet
NamedTuple
시퀀스
Set
Sized
ValuesView
__all__
__builtins__
__doc__
__file__
__name__
_abcoll
_itemgetter
_sys
defaultdict
deque
또한 숫자 유형도 ABC 크기입니다. 이 두 가지 사항에 대해서는 PEP 3119 및 PEP 3141을 참조하세요.
3) iterator의 next() 메서드는 __next__()로 이름이 바뀌고, iterator의 __next__() 메서드를 호출하기 위해 내장 함수 next()가 추가되었습니다.
4) @abstractmethod는 @abstractproperty 두 개의 데코레이터를 추가하면 추상 메서드(속성)
를 작성하는 것이 더 편리합니다.
8. 예외
1) 따라서 예외는 BaseException에서 상속되고 StardardError
2는 삭제됨) 예외 클래스 및 .message 속성의 시퀀스 동작을 제거했습니다.
3) raise Exception, args 구문 대신 raise Exception(args) 사용
4) 구문 변경 예외 잡기, 예외 인스턴스를 식별하기 위해 as 키워드 도입, Py2.5에서:
>>> try:
... raise NotImplementedError('Error')
... NotImplementedError 제외, 오류:
... print error.message
...
Error
in Py3.0:
>>> 시도:
raise NotImplementedError('Error')
notImplementedError를 오류로 제외: #이것을
print(str(error)로 참고하세요. )
오류
5) 예외 체인, __context__가 버전 3.0a1에서 구현되지 않았기 때문에 이 측면에 대해서는 언급하지 않겠습니다
모듈 변경 사항
• cPickle 모듈이 제거되었으며 피클 모듈로 교체할 수 있습니다. 결국 우리는 투명하고 효율적인 모듈을 갖게 될 것입니다.
• imageop 모듈 제거
• audiodev, Bastion, bsddb185, 예외, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, set, sha, stringold, strop, sunaudiodev, timing and 제거 xmllib 모듈
• bsddb 모듈 제거(별도 릴리스, http://www.jcea.es/programacion/pybsddb.htm에서 사용 가능)
• 새 모듈 제거
• os.tmpnam() 및 os.tmpfile() 함수가 tmpfile 모듈로 이동되었습니다.
• tokenize 모듈은 이제 바이트와 함께 작동합니다. 기본 진입점은 더 이상 generate_tokens가 아니지만 tokenize.tokenize()
10. 기타
1) range()를 사용하려는 경우 xrange()의 이름이 변경되었습니다. 목록을 얻으려면 명시적으로 호출해야 합니다:
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8 , 9]
2) bytes 객체는 해시할 수 없으며 b.lower(), b.strip() 및 b.split() 메서드를 지원하지 않지만 후자의 두 메서드에는 다음을 사용할 수 있습니다. 동일한 목적을 달성하기 위한 b.strip(b' ntrf' ) 및 b.split(b' ')
3) zip(), map() 및 filter()는 모두 반복자를 반환합니다. apply(), callable(), coerce(), execfile(), Reduce() 및 reload() 함수가 모두 제거되었습니다.
4) string.letters 및 관련 .lowercase 및 .uppercase가 제거되었습니다. , 대신 string.ascii_letters 등을 사용하십시오.
5) x
6) __getslice__ 시리즈 멤버는 폐기됩니다. a[i:j]는 a.__getitem__(slice(I, j))로 변환되거나 __setitem__ 및 __delitem__은 컨텍스트에 따라 호출됩니다
7) 파일 클래스는 Py2.5에서 더 이상 사용되지 않습니다.
>>> 파일
Py3.0:
>>> 파일
추적(가장 최근 호출 마지막):
파일 "", 1행,
파일
NameError: 이름 'file'이 정의되지 않았습니다