> 백엔드 개발 > 파이썬 튜토리얼 > python3과 python2.7의 차이점

python3과 python2.7의 차이점

高洛峰
풀어 주다: 2016-11-23 09:10:32
원래의
1613명이 탐색했습니다.

검색해 보면 Python에는 python2와 python3의 두 가지 주요 버전이 있다는 것을 알 수 있지만 Python은 다른 언어와 다르며 이전 버전과 호환됩니다. python3은 이전 버전과 호환되지 않지만 대부분의 구성 요소와 확장 기능은 Python을 기반으로 합니다. python2에서 python2와 python3의 차이점을 요약해 보겠습니다.

1. 성능

Py3.0은 Py2.5보다 30% 느리게 pystone 벤치마크를 실행합니다. Guido는 Py3.0이 최적화를 위한 큰 여지를 갖고 있으며 문자열 및 정수 연산에서 좋은 최적화 결과를 얻을 수 있다고 믿습니다.

Py3.1의 성능은 Py2.5에 비해 15% 느리고 아직 개선의 여지가 많습니다.

2. 인코딩

Py3.X 소스 코드 파일은 기본적으로 utf-8 인코딩을 사용하므로 다음 코드가 허용됩니다.

>>> 'china'

>>>print(China)

china

3. 문법

1) <> 제거, 변경 all to !=

2) ``를 제거하고 모두에 대해 repr()을 사용합니다

3) as 및 with 키워드를 추가하고 True, False, None

4) 정수 나누기는 부동 소수점 숫자를 반환합니다. 정수 결과를 얻으려면 //

을 사용하세요. 5) nonlocal 문을 추가하세요. noclocal x를 사용하여 주변(비전역) 변수를 직접 할당합니다

6) print 문을 제거하고 print() 함수를 추가하여 동일한 기능을 수행합니다. exec() 함수

로 변경된 exec 문에서도 마찬가지입니다. 예:

2.X: print "The Answer is", 2*2

3. X: print("답은", 2*2)

2. ")                                                      ~ ~ ~          # 새 줄 출력 >>sys.stderr, "치명적인 오류"

3.X: 인쇄("치명적 오류", file=sys.stderr)

2.X: 인쇄(x, y )                                                                                                                      order x

8) 입력 함수가 변경되어 raw_input이 삭제되고 입력으로 대체되었습니다:

2.X:guess = int(raw_input('Enter an 정수 : ')) # 키보드 입력을 읽는 방법

3. : '))

9) 튜플 매개변수 언패킹을 제거합니다. def(a, (b, c)):pass

10) 새로운 8진수 단어 변수인 oct() 함수가 그에 따라 수정되었습니다.

2. 🎜>

'0666'

3.X의 방법은 다음과 같습니다.

>>> 0666

구문 오류: 잘못된 토큰(, 1행) >>> 0o666

438

>>> oct(438)

'0o666'

11) 바이너리 리터럴 및 bin() 함수 추가

>>> bin(438)

'0b110110110'

> ;>> _438 = '0b110110110'

>>> _438

'0b110110110'

12) 확장된 반복 가능 압축 풀기. Py3에서.

13) 새로운 super()는 더 이상 super()에 매개변수를 전달할 수 없습니다.

>>> class C(object):

def __init__ ( self, a):

print('C', a)

>>> 클래스 D(C):

def __init(self, a ) :

< 0x00D7ED90의 __main__.D 객체>

14) 새로운 메타클래스 구문:

class Foo(*bases, **kwds):

pass

15) 클래스 데코레이터를 지원합니다. 사용법은 함수 데코레이터와 동일합니다:

>>> def foo(cls_a):

def print_func(self):

print('Hello , world!' )

cls_a.print = print_func

return cls_a

>>> @foo

클래스 C(객체):

패스

>>> C().print()

안녕하세요,

클래스 데코레이터를 사용하여 사용할 수 있습니다. 왕자를 위한 사향고양이. 자세한 내용은 PEP 3129를 참조하세요

4. 문자열과 바이트 문자열

1) 이제 문자열은 str이라는 한 종류만 있지만 2와 거의 동일합니다. x 버전의 유니코드.

2) 바이트 문자열은 "데이터 유형"의 2번 항목을 참조하세요.

5. 데이터 유형

1) Py3.X long 유형이 제거되었으며 이제 정수 유형(int)만 있지만 버전 2.X의 long처럼 동작합니다.

2) 8비트 버전에 해당하는 새로운 바이트 유형이 추가되었습니다. 버전 2.X String에서 바이트 리터럴을 정의하는 방법은 다음과 같습니다.

>>> b = b'china'

>>> b)

Str 객체와 bytes 객체는 .encode() (str -> bytes) 또는 .decode( ) (바이트 -> 문자열) 방법입니다. >>> ;> b1 = s.encode()

>>> b1

b'china'

3) dict의 .keys (), .items 및 .values() 메서드는 반복자를 반환하는 반면 이전 iterkeys() 및 기타 함수는 폐기되었습니다.

dict.has_key()도 제거되었습니다.

6. 객체 지향

1) 추상 기본 클래스(ABC) 소개).

2) 컨테이너 클래스와 반복자 클래스는 ABC 크기이므로 Py2.5보다 cellections 모듈에 더 많은 유형이 있습니다.

>>> 컬렉션 가져오기

>>> print('n'.join(dir(collections)))

호출 가능

컨테이너

해시 가능

ItemsView

Iterable

Iterator

KeysView

매핑

MappingView

MutableMapping

MutableSequence

MutableSet

NamedTuple

Sequence

Set

크기

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 두 개의 데코레이터를 추가하여 추상 메소드(속성) 작성이 더욱 편리해졌습니다.

7. 예외

1) 모든 예외는 BaseException에서 상속되며 StardardError는 삭제됩니다.

2) 예외 클래스의 시퀀스 동작 및 .message 속성이 제거됩니다. 🎜>

3) raise Exception 대신 raise Exception(args) 사용, args 구문

4) 예외 잡기를 위한 구문 변경, Py2.5에서는 예외 인스턴스를 식별하기 위해 as 키워드가 도입되었습니다. 🎜>

>>> 시도:

... raise NotImplementedError('Error')

... NotImplementedError 제외, 오류:

... print error.message

...

Py3.0의 오류

:

>>> ; 시도해 보세요:

                                                                                                          ~                                       오류로 NotImplementedError 제외: #참고: >5) __context__는 버전 3.0a1에서 구현되지 않기 때문에

8. 모듈 변경 사항

1) cPickle 모듈이 변경되었습니다. 제거되고 피클 모듈을 대신 사용할 수 있습니다. 결국 우리는 투명하고 효율적인 모듈을 갖게 될 것입니다.

2) imageop 모듈 제거

3) audiodev, Bastion, bsddb185, 예외, linuxaudiodev, md5, MimeWriter, mimify, popen2,

rexec, set, sha, stringold, strop, sunaudiodev, timing 및 xmllib 모듈

4) bsddb 모듈 제거(별도 릴리스, http://www.jcea.es/programacion/pybsddb.htm에서 사용 가능)

5) 새 모듈이 제거되었습니다

6) os.tmpnam() 및 os.tmpfile() 함수가 tmpfile 모듈로 이동되었습니다

7) 토큰화 모듈이 이제 작동합니다. 바이트로. 기본 진입점은 더 이상 generate_tokens가 아니지만 tokenize.tokenize()

9. 기타

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 '

ntr f') 및 b.split(b' ')를 사용하여 동일한 목적을 달성할 수 있습니다

3) zip(), map() 및 필터 () 모든 반환 반복자. apply(), callable(), coerce(), execfile(), Reduce() 및 reload

() 함수가 제거되었습니다.

이제 사용할 수 있습니다. callable()을 대체하는 hasattr() 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:

>>> 파일

<'file'>

Py3.X:

> ;>> 파일

역추적(가장 최근 호출 마지막):

파일 "", 첫 번째 줄,

파일

NameError: 이름 'file'이 정의되지 않았습니다

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿