Latest web development tutorials

버전 3 .x를 가진 Python2.x 차이

자주 파이썬 3000, 또는 단순히 Py3k라고 파이썬 3.0 버전. 파이썬의 이전 버전에 대해,이 주요 업그레이드입니다.

너무 많은 부담을 가지고하지 않기 위해, 파이썬 3.0은 하향 호환성의 설계에 고려하지 않습니다.

많은 프로그램의 파이썬의 설계 이전 버전의 파이썬 3.0에서 제대로 수행하지 않습니다.

계정에 파이썬 3.0 및 파이썬 3.0로 마이그레이션을 고려하여 기본 구문 및 라이브러리를 사용하여 파이썬 2.x에서의 중간 버전으로 기존 프로그램의 관리, 파이썬 2.6을 위해 함수의 구문의 일부를 사용할 수 있습니다.

새로운 프로그램은 파이썬 3.0 파이썬 버전 구문을 사용하는 것이 좋습니다.

실행 환경은 파이썬 3.0를 설치할 수 없습니다 또는 프로그램 자체가 지원하지 않는하지 않는 타사의 사용은 파이썬 3.0 라이브러리를. 현재 지원하지 않는 타사 라이브러리 파이썬 3.0 트위스트, py2exe에, PIL 등을들 수있다.

대부분의 타사 라이브러리 3.0 호환 버전을 파이썬 노력하고 있습니다. 즉시 파이썬 3.0을 사용하지 않는 경우에는 프로그램의 호환 파이썬 3.0 버전의 개발을 권장하고 파이썬 2.6을 사용 파이썬 2.7 행한다.

파이썬 3.0의 변화는 다음과 같은 분야에서 주로 :


인쇄 기능

인쇄 문은 인쇄 () 함수로 대체, 사라 졌어요. 일부 파이썬 2.6 및 파이썬 2.7 지원 인쇄 구문이 양식. 파이썬 2.6 및 파이썬 2.7 내부에서는 세 가지 형태는 동일합니다

print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数

그러나, 파이썬 2.6 실제로 새 인쇄 () 구문을 지원하고있다 :

from __future__ import print_function
print("fish", "panda", sep=', ')

유니 코드

파이썬 2는 ASCII str을 () 타입, 유니 코드 () 혼자가 아닌 바이트 유형을했다.

바이트 bytearrays : 자, 파이썬 3에서, 우리는 마침내 유니 코드 (UTF-8) 문자열과 바이트 클래스가 있습니다.

다음 코드를하게 Python3.X 소스 파일 기본 UTF-8 인코딩, 법적 때문에 :

>>> 中国 = 'china' 
>>>print(中国) 
china

파이썬 2.x에서

>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

파이썬 3.x를

>>> str = "我爱北京天安门"
>>> str
'我爱北京天安门'

분할

매우 하이 엔드 이외의 언어로 파이썬 부문은 규칙의 매우 복잡한있다. 이 연산자와 함께 부문에서 파이썬 / //

첫째, / 부문 :

우리의 대부분은 자바와 같은 언어에 익숙한처럼 파이썬 2.x에서 / 부문에서 아 C는 정수, 소수 부분이 완전히 무시 된 정수 나누기의 결과와 유사하다 아, 소수점 부동 소수점 부문은 GET의 일부 남아 결과 부동 소수점 숫자입니다.

파이썬 3.x의에서 / 부서는 더 이상 그렇게하지 않고, 정수 사이의 구분을 위해, 결과는 부동 소수점 될 것입니다.

파이썬 2.x를 :

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

파이썬 3.x를 :

>>> 1/2
0.5

// 부문의 경우,이 부문은 결과 것 부문은 자동으로 바닥 조작이 파이썬 2.x 및 파이썬 3.x의에서 동일 바닥 부문이라고합니다.

파이썬 2.x를 :

>>> -1 // 2
-1

파이썬 3.x를 :

>>> -1 // 2
-1

당신이 소수 부분을 차단하려는 경우, 소수 부분을 삭제하지만, 동작 바닥에 수행하지 않습니다, 당신은 수학 기능 모듈 TRUNC를 사용할 필요가

파이썬 3.x를 :

>>> import math
>>> math.trunc(1 / 2)
0
>>> math.trunc(-1 / 2)
0

이상

파이썬 3에서 처리 파이썬 3에서, 우리는 이제 키워드로 사용, 또한 약간의 이상 변화이다.

EXC 제외 만든 예외를 잡기위한 구문, VAR는VAR로 EXC 제외하고 변경되었습니다.

예외를 여러 범주를 잡을 수 VAR로 (exc1, exc2)를 제외하고 구문. 파이썬 2.6는 두 구문을 지원한다.

  • 1. 2.X 시대, 슬로우 할 수 있습니다 만 BaseException 개체에서 상속 된 3.x의 시대에 직접적으로 발생 할 수있는 개체의 모든 종류가 있습니다.
  • 2. 2.X 인상 문이 멋진 문구를 직접 생성자는 객체가 될 수있다 던졌습니다 전화 취소 별도의 개체 유형 및 매개 변수, 3.X에 쉼표가 발생합니다.

2.X 시대에, 그 절차 적 오류에 추가하여 코드에 이상하지만, 또한 종종 볼 수있다 3.X에서, 디자이너는 오류의보다 구체적인 비정상적인 변화를해야 할 몇 가지 일반적인 제어 구조를 만들 수 있죠 순서의 경우를 제외하고 처리 할 수있는 문을 잡으려고.


xrange

xrange () 사용에 파이썬 2의 반복 객체를 생성하는 것은 매우 인기가 있습니다. 예를 들면 다음과 같습니다 루프 또는 목록 / 컬렉션 / 사전 함축합니다.

이러한 성능은 매우 이미지 생성기 (예. "게으른 평가"). 그러나 xrange-반복 가능한 당신이 통과 할 수 있습니다 무한, 무제한 수단이다.

때문에 게으른 평가뿐만 아니라 당신이 한 번 통과 할 수없는 경우, xrange () 함수 비율 범위 () 빠르게 (사이클 등)의. 그럼에도 불구하고, 하나의 반복에 비해 반복하면, 여러 번 반복하지 않는 것이 좋습니다 처음부터 발생 때마다 때문이다.

파이썬 3에서, 범위는 () xrange처럼 () 특정 xrange () 함수가 더 이상 존재 달성하지 수 있도록 (파이썬에서 3 xrange ()를 예외 이름을 던질 것이다).

import timeit

n = 10000
def test_range(n):
    return for i in range(n):
        pass

def test_xrange(n):
    for i in xrange(n):
        pass   

파이썬 2

print 'Python', python_version()

print '\ntiming range()' 
%timeit test_range(n)

print '\n\ntiming xrange()' 
%timeit test_xrange(n)

Python 2.7.6

timing range()
1000 loops, best of 3: 433 µs per loop


timing xrange()
1000 loops, best of 3: 350 µs per loop

파이썬 3

print('Python', python_version())

print('\ntiming range()')
%timeit test_range(n)

Python 3.4.1

timing range()
1000 loops, best of 3: 520 µs per loop
print(xrange(10))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-5-5d8f9b79ea70> in <module>()
----> 1 print(xrange(10))

NameError: name 'xrange' is not defined

진수 문자 표현

8 진수는 0777의 원래 형태는 사용할 수 없습니다, 0o777 작성해야합니다; 이진 0b111에 작성해야합니다.

추가 된 빈 () 함수는 이진 스트링으로 정수로 변환하는 데 사용된다. 파이썬 2.6는 두 구문을 지원한다.

파이썬 3.x를, 그리고 진수 문자 한 방향으로 만, 즉 0o1000입니다.

파이썬 2.x에서

>>> 0o1000
512
>>> 01000
512

파이썬 3.x를

>>> 01000
  File "<stdin>", line 1
    01000
        ^
SyntaxError: invalid token
>>> 0o1000
512

불평등 연산자

파이썬 2.x는이> <! 작성하기위한 두 가지 방법이 있습니다 의미 = 그리고하지 않습니다

> <다이어트를 파이썬 3.x를이!의 <> 만 떨어 뜨리지 = 웨이 쓰고, 다행히, 나는 사용하지 않습니다


표현``를 repr을 제거

에 repr 함수``다시 따옴표 파이썬 2.x에서는의 역할에 해당

파이썬 3.x를이 그렇게하는 목적은 코드가 더 명확 보이는 수 있도록하는 것입니다, 만에 repr 기능을 허용하는``표기를 삭제하는 방법? 하지만, 그것은 디버그에 사용되는 보통 때 거의 대부분의 시간에 repr하거나 객체를 기술하는 문자열로 STR 함수를 사용하는 기회를 느낀다.

def sendMail(from_: str, to: str, title: str, body: str) -> bool:
    pass

모듈의 복수의 이름이 변경 (따라 PEP8)

이전 이름 새 이름
_winreg winreg를
ConfigParser configparser
copy_reg copyreg
SocketServer socketserver
를 repr reprlib

있는 StringIO 모듈은 이제 새로운 입출력 모듈에 통합됩니다. 새, MD5, gopherlib 모듈은 삭제됩니다. 파이썬 2.6는 새로운 입출력 모듈을 지원한다.

HTTPLIB는 BaseHTTPServer는 CGIHTTPServer는 SimpleHTTPServer, 쿠키는 HTTP 패키지에 통합 될 cookielib.

간부 문 만 간부 () 함수를 취소합니다. 파이썬 2.6 지원 간부 () 함수를 가지고있다.


5. 데이터 유형

1) Py3.X 지금이 하나의 정수 --int이지만, 긴의 2.X 버전처럼 동작, 긴 유형을 제거

2) 추가는 여덟 시리즈의 2.X 버전에 해당하는 입력, 다음과 같이 바이트 문자 방법은 정의 바이트 :

>>> b = b'china' 
>>> type(b) 
<type 'bytes'> 

서로 - (> STR 바이트) 방법 - (> 바이트 STR) 또는 .decode () 캐릭터 라인 객체와 바이트 객체는 함수 .encode ()를 사용할 수 있습니다.

>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode() 
>>> b1 
b'china' 

.keys () 3) DICT가. 항목과 .values ​​() 메소드는, 반복자를 반환 이전 iterkeys 반면 () 및 기타 기능이 삭제됩니다. 이 제거 동시에 dict.has_key (), 그것에로 교체합니다.