Python 2와 Python 3의 주요 차이점은 무엇인가요?
1. 성능
Py3.0은 Py2.5보다 30배 느리게 pystone 벤치마크를 실행합니다. Guido는 Py3.0이 최적화를 위한 큰 여지를 갖고 있으며 문자열 및 정수 연산에서 좋은 최적화 결과를 얻을 수 있다고 믿습니다.
Py3.1 성능은 Py2.5보다 15배 느리고 여전히 개선의 여지가 많습니다.
2. 인코딩
Py3.X 소스 코드 파일은 기본적으로 utf-8 인코딩을 사용합니다.
3. lt;를 제거했습니다. 모두에 !=를 사용하세요. 없음
4) 정수 나누기는 부동 소수점 숫자를 반환하려면 //
5) 추가하세요. 비지역 진술. 주변(비전역) 변수를 직접 할당하려면 noclocal x를 사용하세요.
6) 동일한 기능을 얻으려면 print 문을 제거하고 print() 함수를 추가하세요. exec() 함수로 변경된 exec 문도 마찬가지입니다.
7) x 및 y 유형이 일치하지 않는 경우 xlt;y와 같은 순차 연산자의 동작을 변경했습니다. , 후속 bool 값을 반환하는 대신 TypeError가 발생합니다.
8) 입력 함수가 변경되었고, raw_input이 삭제되고 입력으로 대체되었습니다:
9) 튜플 매개변수 압축 해제가 변경되었습니다. 제거됨. def(a, (b, c)) 수 없음: pass는 다음과 같은 함수를 정의합니다.
10) 새로운 8진수 변수인 oct() 함수는 이에 따라 수정됩니다.
11) 바이너리 변수 및 bin() 함수가 추가되었습니다.
12) 반복 가능한 압축 해제가 확장되었습니다. Py3에서.
13) 새로운 super(). super()에 매개변수를 전달할 필요가 없습니다.
14) 새로운 메타클래스 구문:
15) 클래스 데코레이터를 지원합니다. 사용법은 함수 데코레이터와 동일합니다:
4. 문자열과 바이트 문자열
1) 이제 문자열 유형은 str 하나만 있지만 거의 동일합니다. 유니코드의 2.x 버전.
2) 바이트 문자열에 관해서는 "데이터 유형"의 항목 2를 참조하십시오.
5. 데이터 유형
1) Py3.X는 긴 유형을 제거합니다. 현재 정수 유형은 int 하나만 있지만 버전 2.X에서는 long처럼 동작합니다.
2) 버전 2.X의 8비트 문자열에 해당하는 새로운 바이트 유형이 추가됩니다.< / p>
3) dict의 .keys(), .items 및 .values() 메서드는 반복자를 반환하는 반면, 이전 iterkeys() 및 기타 함수는 폐기되었습니다. 또한 dict.has_key()도 제거되었으며, 이를
6. 객체 지향
1) 추상 기본 클래스(ABC)를 도입합니다.
2) 컨테이너 클래스와 반복자 클래스는 ABC 크기이므로 Py2.5보다 cellections 모듈에 더 많은 유형이 있습니다.
3) iterator의 next() 메소드는 __next__()로 이름이 바뀌고, iterator의 __next__() 메소드를 호출하기 위해 내장 함수 next()가 추가되었습니다.
4 ) 추상 메소드(속성) 작성을 보다 편리하게 하기 위해 @abstractmethod 및 @abstractproperty 두 개의 데코레이터가 추가되었습니다.
7. 예외
1) 모든 예외는 BaseException에서 상속되며 StardardError는 삭제됩니다.
2) 예외 클래스의 시퀀스 동작 및 .message 속성은 다음과 같습니다. 제거됨
3) raise Exception, args 구문 대신 raise Exception(args) 사용
4) 예외를 포착하는 구문이 변경되고 예외 인스턴스를 식별하기 위해 as 키워드가 도입됨
5) __context__가 버전 3.0a1에서 구현되지 않았기 때문에 예외 체인
8. 모듈 변경 사항
1) cPickle 모듈이 제거되고 pickle 모듈이 대신 사용할 수 있습니다. 결국 우리는 투명하고 효율적인 모듈을 갖게 될 것입니다.
2) imageop 모듈 제거
3) audiodev, Bastion, bsddb185, 예외, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, set, sha, stringold, strop 제거 , sunaudiodev, 타이밍 및 xmllib 모듈
4) bsddb 모듈 제거(별도 릴리스, http://www.jcea.es/programacion/pybsddb.htm에서 사용 가능)
5) 새 모듈이 제거되었습니다.
6) os.tmpnam() 및 os.tmpfile() 함수가 tmpfile 모듈로 이동되었습니다.
7) 토큰화 모듈이 이제 Work입니다. 바이트로. 기본 진입점은 더 이상 generate_tokens가 아니지만 tokenize.tokenize()
9. 기타
1) range()를 사용하려는 경우 xrange()의 이름이 변경되었습니다. () 목록을 얻으려면 명시적으로 호출해야 합니다.
2) 바이트열 객체는 해시할 수 없으며 b.lower(), b.strip() 및 b.split() 메서드를 지원하지도 않습니다. , 그러나 후자의 두 가지 경우에는 b.strip(b' \n\t\r \f') 및 b.split(b' ')를 사용하여 동일한 목적을 달성할 수 있습니다.
3 ) zip(), map() 및 filter() 둘 다 반복자를 반환합니다. apply(), callable(), coerce(), execfile(), Reduce() 및 reload() 함수가 제거되었으며 이제 hasattr()을 사용하여 callable()을 대체할 수 있습니다. 4 ) string.letters 및 관련 .lowercase 및 .uppercase가 제거되었습니다. 대신 string.ascii_letters를 사용하십시오.
5) x lt; y를 비교할 수 없으면 TypeError 예외가 발생합니다. 버전 2.x는 의사 난수 부울 값을 반환합니다.
6) __getslice__ 시리즈 멤버는 폐기됩니다. a[i:j]는 컨텍스트에 따라 a.__getitem__(slice(I, j)) 또는 __setitem__ 및 __delitem__ 호출로 변환됩니다.
7) 파일 클래스가 포기됩니다