>백엔드 개발 >파이썬 튜토리얼 >Python3.x와 Python2.x의 차이점에 대한 자세한 설명

Python3.x와 Python2.x의 차이점에 대한 자세한 설명

巴扎黑
巴扎黑원래의
2017-04-05 14:00:332539검색

Python3.x는 이전의 많은 기능을 폐지하고 새로운 기능을 도입한 Python의 혁신적인 업그레이드입니다. 1.x 및 2.x의 이전 코드와 완전히 호환되지 않습니다.

Python2.x는 이전 버전과 호환되며 최신 버전은 Python 2.7입니다. 그 중 Python이 3.X로 원활하게 전환할 수 있도록 버전 2.6과 2.7이 출시되었으며, 일부 3.X 기능도 추가되었습니다.

현재 많은 라이브러리가 3.x(예: Django, wxPython)를 지원하지 않으며 대부분의 애플리케이션은 여전히 ​​2.x를 기반으로 합니다. 초보자는 버전 2.7을 사용하는 것이 좋습니다.

Python 3.X와 2.X의 주요 차이점은 다음과 같습니다

1. 공연
Py3.0은 Py2.5보다 30% 느리게 pystone 벤치마크를 실행합니다. Guido는 Py3.0이 최적화할 여지가 크며 문자열 및 정수 연산을 수행할 수 있다고 믿습니다
좋은 최적화 결과를 얻으려면
Py3.1의 성능은 Py2.5보다 15% 느리며 여전히 개선의 여지가 많습니다.

2. 인코딩
Py3.X 소스 코드 파일은 기본적으로 utf-8 인코딩을 사용하므로 다음 코드가 합법적입니다:
>>> 중국 = '중국'
>>>인쇄(중국)
중국

3. 문법
1) <>를 제거하고 모두 !=
로 대체했습니다. 2) ``를 제거하고 대신 repr()
을 사용하십시오. 3) as 및 with as 키워드를 추가하고 True, False, None
4) 정수 나누기는 부동 소수점 숫자를 반환합니다. 정수 결과를 얻으려면 //
를 사용하세요. 5) nonlocal 문을 추가합니다. noclocal x
를 사용하여 주변(비전역) 변수를 직접 할당할 수 있습니다. 6) print 문을 제거하고 print() 함수를 추가하여 동일한 기능을 수행합니다. exec() 함수로 변경된 exec문도 마찬가지입니다
예:
2.X: "답은" 인쇄, 2*2
3.X: print("답은", 2*2)
2.X: x를 인쇄하고, 3.X: print(x, end=" ") # 줄을 바꾸려면 공백을 사용하세요
                                                                                                                          2.X: >>sys.stderr, "치명적인 오류" 인쇄
3.X: print("치명적인 오류", file=sys.stderr)
                                                      3.X: print((x, y)) # print(x, y)와 다릅니다!
7) x 8) 입력 기능이 변경되어 raw_input이 삭제되고 입력으로 대체되었습니다:
2.X:guess = int(raw_input('정수 입력 : ')) # 키보드 입력을 읽는 방법
3.X:guess = int(input('정수를 입력하세요 : '))

9) 튜플 매개변수 압축 해제를 제거합니다. def(a, (b, c)):pass
와 같은 함수를 정의할 수 없습니다. 10) 새로운 8진수 단어 변수에 대해 oct() 함수가 그에 따라 수정되었습니다.
2.X의 방법은 다음과 같습니다.
>>>0666
438
>>>10월(438)
'0666'
3.X는 다음과 같습니다:
>>>0666
구문 오류: 잘못된 토큰(, 1행)
>>>0o666
438
>>>10월(438)
'0o666'
11) 바이너리 리터럴 및 bin() 함수 추가
>>>빈(438)
'0b110110110'
>>> _438 = '0b110110110'
>>> _438
'0b110110110'
12) 확장된 반복 가능한 언패킹. Py3에서. 객체와 seq는 반복 가능합니다.
13) 새로운 super()는 더 이상 super()에 매개변수를 전달할 수 없습니다.
>>> 클래스 C(객체):
             def __init__(self, a):
                                 인쇄('C', a)
>>> D(C)반:
             def __init(self, a):
                 super().__init__(a) # 매개변수 없이 super() 호출
>>>D(8)
C8
<0x00D7ED90의 __main__.D 객체>
14) 새로운 메타클래스 구문:
클래스 Foo(*베이스, **kwds):
합격
15) 클래스 데코레이터를 지원합니다. 사용법은 함수 데코레이터와 동일합니다:
>>> def foo(cls_a):
              def print_func(self):
                                                   print('Hello, world!')
            cls_a.print = print_func
            cls_a 반환
>>> @foo
클래스 C(객체):
합격
>>>C().print()
안녕하세요, 세상!
클래스 데코레이터를 사용하면 사향 고양이를 왕자로 바꾸는 트릭을 수행할 수 있습니다. 자세한 내용은 PEP 3129를 참조하세요

4. 문자열과 바이트 문자열 1) 이제 문자열은 str이라는 한 가지 유형만 존재하지만 2.x 버전의 유니코드와 거의 동일합니다.

2) 바이트열에 대해서는 "Data Type"의 2항을 참고하세요

5. 데이터 유형 1) Py3.X는 long 유형을 제거했으며 이제 정수 유형은 int 하나만 있지만 2처럼 동작합니다. 2) 버전 2.X의 옥텟 문자열에 해당하는 새로운 바이트 유형이 추가되었습니다. 바이트 리터럴을 정의하는 방법은 다음과 같습니다.
>>>b=b'중국'
>>> 유형(b)
<'바이트' 입력>
str 객체와 bytes 객체는 .encode() (str -> bytes) 또는 .decode() (bytes -> str) 메서드를 사용하여 서로 변환할 수 있습니다.
>>> s = b.decode()
>>> '중국'
>>> b1 = s.encode()
>>>b1
비'차이나'
3) dict 반환 반복자의 .keys(), .items 및 .values() 메서드는 이전 iterkeys() 및 기타 함수는 폐기되었습니다.
도 제거되었습니다. dict.has_key(),
로 교체하세요.

6. 객체지향
1) 추상 기본 클래스(Abstract Base Classes, ABC)를 소개합니다.
2) 컨테이너 클래스와 반복자 클래스는 ABC 크기이므로 Py2.5보다 cellections 모듈에 더 많은 유형이 있습니다.
>>> 수입 컬렉션
>>> print('n'.join(dir(컬렉션)))
호출 가능
컨테이너
해시 가능
항목보기
반복 가능
반복자
키뷰
매핑
매핑뷰
가변 매핑
가변 시퀀스
가변세트
NamedTuple
순서
설정
크기
가치보기
__모두__
__빌트인__
__doc__
__파일__
__이름__
_abcoll
_아이템게터
_sys
디폴트딕트
데크
또한 숫자 유형도 ABC 크기입니다. 이 두 가지 사항에 대해서는 PEP 3119 및 PEP 3141을 참조하세요.
3) iterator의 next() 메소드는 __next__()로 이름이 바뀌고, iterator의 __next__() 메소드를 호출하기 위해 내장 함수 next()가 추가되었습니다.
4) 추상 메소드(속성) 작성을 더욱 편리하게 하기 위해 @abstractmethod, @abstractproperty 두 개의 데코레이터가 추가되었습니다.

7. 이상
1) 모든 예외는 BaseException에서 상속되며 StardardError
가 제거됩니다. 2) 예외 클래스
의 시퀀스 동작 및 .message 속성을 제거했습니다. 3) raise Exception, args 구문 대신 raise Exception(args)을 사용하세요
4) 예외 포착을 위한 구문 변경, Py2.5에서는 예외 인스턴스를 식별하기 위해 as 키워드가 도입되었습니다.
>>> 시도해 보세요:
...     NotImplementedError('Error') 발생
... NotImplementedError 제외, 오류:

... ... error.message 인쇄
...
오류
Py3.0에서:
>>> 시도해 보세요:
NotImplementedError('Error') 발생
          NotImplementedError를 오류로 제외: #다음과 같이 주의하세요
                              인쇄(str(error))
오류
5) 예외 체인, __context__가 버전 3.0a1에서 구현되지 않았기 때문입니다.

8. 모듈 변경
1) cPickle 모듈이 제거되었으며 Pickle 모듈로 교체할 수 있습니다. 결국 우리는 투명하고 효율적인 모듈을 갖게 될 것입니다.
2) imageop 모듈 제거
3) audiodev, Bastion, bsddb185, 예외, linuxaudiodev, md5, MimeWriter, mimify, popen2,
가 제거되었습니다. rexec, 세트, ​​sha, stringold, strop, sunaudiodev, 타이밍 및 xmllib 모듈
4) bsddb 모듈 제거(별도 릴리스, http://www.jcea.es/programacion/pybsddb.htm에서 사용 가능)
5) 새 모듈 제거
6) os.tmpnam() 및 os.tmpfile() 함수가 tmpfile 모듈
으로 이동되었습니다. 7) 이제 토큰화 모듈이 바이트와 함께 작동합니다. 기본 진입점은 더 이상 generate_tokens가 아니라 tokenize.tokenize()

입니다. 9. 기타
1) xrange()의 이름이 range()로 바뀌었습니다. range()를 사용하여 목록을 얻으려면 명시적으로 호출해야 합니다.
>>> 목록(범위(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2) 바이트열 객체는 해시할 수 없으며 b.lower(), b.strip() 및 b.split() 메서드를 지원하지 않습니다. 그러나 후자의 두 메서드의 경우 b.strip(b'
을 사용할 수 있습니다. ntr f') 및 b.split(b' ')는 동일한 목적을 달성합니다
3) zip(), map() 및 filter()는 모두 반복자를 반환합니다. 그리고 apply(), callable(), coerce(), execfile(), Reduce() 및 reload
() 기능이 제거되었습니다

이제 hasattr()을 사용하여 callable()을 대체할 수 있습니다. hasattr()의 구문은 다음과 같습니다. hasattr(string, '__name__')

4) string.letters 및 관련 .lowercase 및 .uppercase가 제거되었습니다. 대신 string.ascii_letters를 사용하십시오
5) x < y를 비교할 수 없으면 TypeError 예외가 발생합니다. 버전 2.x는 의사 난수 부울 값을 반환합니다.
6) __getslice__ 시리즈 멤버는 폐기됩니다. a[i:j]는 상황에 따라 a.__getitem__(slice(I, j)) 또는 __setitem__ 및
으로 변환됩니다. __delitem__ 통화
7) Py2.5에서는 파일 클래스가 중단되었습니다.
>>> 파일
<'파일' 입력>
Py3.X에서:
>>> 파일
역추적(가장 최근 호출 마지막):
파일 "", 첫 번째 줄,
에 있음         파일
NameError: 이름 'file'이 정의되지 않았습니다

위 내용은 Python3.x와 Python2.x의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.