거의 모든 파이썬 2 프로그램은 파이썬 3 환경에서 정상적으로 실행되기 위해 약간의 수정이 필요합니다. 이 전환 과정을 간소화하기 위해 파이썬 3은 2to3라는 실용 스크립트를 가지고 있습니다. 이 스크립트는 당신의 파이썬 2 프로그램 소스 파일을 입력으로 삼고 자동으로 파이썬 3의 형태로 변환합니다.
파이썬 2에서 print은 문장이다. 당신이 무엇을 출력하고 싶은지, print 키워드의 뒤에 넣으면 된다. 파이썬 3에서 print은 () 함수이다. 다른 함수와 마찬가지로 print () 는 당신이 출력하고 싶은 것을 인자로 전달해야 한다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | print() | |
| ② | print 1 | print(1) |
| ③ | print 1,2 | print(1,2) |
| ④ | print 1,2, | print(1,2,end=’ ‘) |
| ⑤ | print >>sys.stderr,1,2,3 | print(1,2,3, file=sys.stderr) |
1 , 공백 행을 출력하기 위해, print을 호출해야 합니다. print () 는 print () 을 출력하기 위해, print () 는 print () 를 호출해야 합니다. 2 , 개별적인 값을 출력하기 위해서는 print () 의 하나의 arguments로 이 값을 가져야 합니다. 3. 출력용으로 한 공백으로 분리된 두 개의 값을 두 개의 변수 호출 print ((() 으로 사용할 수 있다. 이 예제에는 몇 가지 트릭이 있다. 파이썬 2에서는 print 문장의 끝부분으로 쉼표 ((() 를 사용한다면, 그것은 빈 공간으로 출력 결과를 분리하고, 다음에는 후속 빈 공간 ((trailing space) 을 출력한다. 다시 돌아가는 것을 출력하지 않는다. 파이썬 3에서는 end=’ ‘를 키워드 인 print에 전달함으로써 동일한 효과를 얻을 수 있다. end arguments의 기본값은 ‘\n’이므로, end arguments의 값을 재설정함으로써, 마지막에 출력된 돌아가는 기호를 취소할 수 있다. 5. 파이썬 2에서는, >>pipe_name 문법을 사용하여, 출력을 하나의 파이프로 다시 유도할 수 있습니다. 예를 들어, sys.stderr. 파이썬 3에서는, 파이프를 키워드 파라미트 파일의 값으로 프린트에 전달하여 동일한 기능을 수행 할 수 있습니다. 파라미트 파일의 기본값은 std.stdout이므로, 그것의 값을 다시 지정하면 프린트가 다른 파이프로 출력을 할 수 있습니다.
파이썬 2에는 두 종류의 문자열이 있습니다.유니코드 문자열그리고비 유니코드 문자열파이썬 3에는 오직 하나의 타입이 있습니다.유니코드 문자열。
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | u’PapayaWhip’ | ‘PapayaWhip’ |
| ② | ur’PapayaWhip\foo’ | r’PapayaWhip\foo’ |
Python 2의 유니코드 문자열은 Python 3의 문자열은 항상 유니코드 형태로 있기 때문에 Python 3에서 일반 문자열입니다. 유니코드 원본 문자열 ((raw string) ((이런 문자열을 사용하면 파이썬은 자동으로 역축선을 변환하지 않습니다.“) 는 일반 문자열로도 대체되었는데, 파이썬 3에서는 모든 원본 문자열이 유니코드로 코드화되었기 때문이다.
파이썬 2에는 객체를 문자열로 강제 변환할 수 있는 두 개의 범용 함수가 있다. 유니코드 () 는 객체를 유니코드 문자열로 변환하고, str () 는 객체를 비 유니코드 문자열로 변환한다. 파이썬 3에는 오직 하나의 문자열 유형, 유니코드 문자열이 있으므로 str () 함수가 모든 기능을 수행한다.unicode() 함수는 파이썬 3에서 더 이상 존재하지 않습니다。)
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | unicode(anything) | str(anything) |
파이썬 2에는 비플로잉 점수를 위해 준비된 int와 long 타입이 있다. int 타입의 최대 값은 sys.maxint를 초과할 수 없으며, 이 최대 값은 플랫폼과 관련이 있다. 긴 정수를 숫자의 끝에 L를 붙임으로써 정의할 수 있다. 분명히, int 타입이 나타내는 숫자 범위보다 더 넓다. 파이썬 3에는 오직 하나의 정수 타입인 int가 있으며, 대부분의 경우, 그것은 파이썬 2의 긴 정수와 비슷하다. 두 종류의 정수는 이미 존재하지 않기 때문에, 그들을 구별하기 위해 특별한 문법을 사용할 필요가 없다.
더 읽어보기: PEP 237: 통일된 둥근형과 둥근형.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | x = 1000000000000L | x = 1000000000000 |
| ② | x = 0xFFFFFFFFFFFFL | x = 0xFFFFFFFFFFFF |
| ③ | long(x) | int(x) |
| ④ | type(x) is long | type(x) is int |
| ⑤ | isinstance(x,long) | isinstance(x,int) |
파이썬 2의 십진형 긴 정형은 파이썬 3에서 십진형의 일반 정수로 대체되었다. 파이썬 2의 16진의 긴 정형은 파이썬 3에서 16진의 일반 정수로 대체되었다. 파이썬 3에서는 더 이상 긴 전체형이 존재하지 않기 때문에자연의 원래 long () 함수도 없습니다. 변수를 인체형으로 강제 변환하기 위해 int () 함수를 사용할 수 있습니다.。 변수가 integer인지 확인하고, 그 데이터 타입을 얻으며, int 타입 (long이 아닌) 과 비교한다. 당신은 또한 inisinstance () 함수를 사용하여 데이터 타입을 검사할 수 있습니다. 다시 강조하자면, int를 사용하여 integer 타입을 검사합니다.
파이썬 2에서는 <>가!=의 대명사로 쓰인다. 파이썬 3에서는!=만 지원하고, 더이상 <>는 지원하지 않는다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | if x <> y: | if x != y: |
| ② | if x <> y<> z: | if x != y!= z: |
1, 간단하게 비교해 보세요. 2, 상대적으로 복잡한 세 가지 값 사이의 비교.
파이썬 2에서, 사전 객체의 has는_key() 방법은 사전에 특정 키가 포함되어 있는지 테스트하기 위한 방법이다.in연산자:
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | a_dictionary.has_key(‘PapayaWhip’) | ‘PapayaWhip’ in a_dictionary |
| ② | a_dictionary.has_key(x) or a_dictionary.has_key(y) | x in a_dictionary or y in a_dictionary |
| ③ | a_dictionary.has_key(x or y) | (x or y) in a_dictionary |
| ④ | a_dictionary.has_key(x + y) | (x + y) in a_dictionary |
| ⑤ | x + a_dictionary.has_key(y) | x + (y in a_dictionary) |
1, 가장 간단한 형태 2. or의 우선순위는 in보다 낮기 때문에 여기에 괄호를 추가할 필요가 없다. 3, 다른 한편으로, 같은 이유로 or의 우선순위는 in보다 낮아, 여기에 괄호를 추가해야 합니다。(주의하십시오: 여기 코드는 이전 줄과 완전히 다릅니다。Python는 먼저 x or y를 해석하여 x ((x가 BULL의 컨텍스트에서 사실이라면) 또는 y를 얻습니다。 그리고 Python는 이 결과가 a인지 여부를 검사합니다._dictionary의 한 키. 4 , 연산자 in의 우선순위는 연산자 +보다 낮기 때문에 코드의 이러한 형태는 기술적으로 괄호를 필요로 하지 않지만 2to3는 여전히 추가된다. 5. 이 형식은 반드시 괄호를 필요로 합니다, 왜냐하면 in의 우선순위가 +。보다 낮기 때문입니다.
파이썬 2에서, 많은 사전 방식의 반환값은 목록이다. 그중 가장 많이 사용되는 방식에는 keys,items,andvalues이 있다. 파이썬 3에서는, 위의 모든 방법의 반환값은 동적 뷰로 변경되었다. 일부 컨텍스트 환경에서, 이러한 변경은 영향을 미치지 않는다. 이러한 방법의 반환값이 즉시 다른 함수에 전달되고, 그 함수가 전체 시퀀스를 가로질러 이동하면, 위의 방법의 반환값은 목록 또는 그림이 전혀 영향을 미치지 않는다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | a_dictionary.keys() | list(a_dictionary.keys()) |
| ② | a_dictionary.items() | list(a_dictionary.items()) |
| ③ | a_dictionary.iterkeys() | iter(a_dictionary.keys()) |
| ④ | [i for iin a_dictionary.iterkeys()] | [i for iin a_dictionary.keys()] |
| ⑤ | min(a_dictionary.keys()) | no change |
1 , list () 함수가 keys () 의 반환값을 정적인 목록으로 변환합니다. 보안상의 고려로 2to3는 오류를 보고할 수 있습니다. 이러한 코드는 효과적이지만, 뷰를 사용하는 데는 효율성이 낮습니다. 리스트가 반드시 필요한지 확인하기 위해 변환된 코드를 확인해야하며, 아마도 뷰도 동일한 작업을 수행 할 수 있습니다. 2 , 이것은 또 다른 뷰입니다. () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () 3 , 파이썬 3에서는 더 이상 iterkeys ((() 을 지원하지 않습니다. 필요한 경우 iter ((() 을 사용하여 keys ((() 의 반환 값을 인더레이터로 변환합니다. 4, 2to3는 iterkeys () 메소드가 리스트 해설에서 사용되고 있음을 인식하고, 그것을 Python 3의 keys () 메소드로 변환합니다. 이는 iter () 을 추가로 사용하여 반환값을 패키징할 필요가 없습니다. 5,2to3는 또한 keys ((() 방법의 반환값이 즉시 전체 시퀀스를 거쳐갈 다른 함수에 전달되는 것을 인식할 수 있습니다. 따라서 keys ((() 의 반환값을 먼저 목록으로 변환할 필요가 없습니다. 반대로, min ((() 함수는 기꺼이 시각을 거쳐갈 것입니다. 이 과정은 min (((), max (((), sum (((), list (((), tuple (((), set (((), sorted (((), any ((() 및 all (()) 에 똑같이 효과적입니다.
파이썬 2에서 파이썬 3까지, 표준 큐리의 일부 모듈들은 이름이 변경되었다. 또한, 서로 연관된 모듈들은 더 논리적으로 연관되도록 조합되거나 재조직되었다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import httplib | import http.client |
| ② | import Cookie | import http.cookies |
| ③ | import cookielib | import http.cookiejar |
| ④ | import BaseHTTPServer import SimpleHTTPServer import CGIHttpServer |
import http.server |
http.client 모듈은 HTTP 리소스를 요청하고 HTTP 응답을 분석하는 데 사용할 수 있는 기본 라이브러리를 구현합니다. http.cookies 모듈은 HTTP 헤더에서 세트-쿠키로 전송된 쿠키를 얻기 위한 Python 인터페이스를 제공합니다. 일반적인 브라우저는 쿠키를 파일 형태로 디스크에 저장하고, http.cookiejar 모듈은 이러한 파일을 조작할 수 있다. http.server 모듈은 기본 HTTP 서버를 구현합니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import urllib | import urllib.request urllib.parse,urllib.error |
| ② | import urllib2 | import urllib.request urllib.error |
| ③ | import urlparse | import urllib.parse |
| ④ | import robotparser | import urllib.robotparser |
| ⑤ | from urllib import FancyURLopener from urllib import urlencode |
from urllib.request import FancyURLopener from urllib.parse import urlencode |
| ⑥ | from urllib2 import Request from urllib2 import HTTPError |
from urllib.request import Request from urllib.error import HTTPError |
이전에는 파이썬 2의 urllib 모듈에는 urlopen () 가 포함된 다양한 함수들이 있었고, URL을 그 구성 요소인 splitype () 와 splithost () 와 splituser () 함수들로 나누는 데도 유용했습니다. 새로운 urllib 패키지에서 이러한 함수들은 보다 논리적으로 조직되어 있습니다. 2to3는 이러한 함수들의 호출을 새로운 명칭에 맞게 수정할 것입니다. 파이썬 3에서는 이전 urllib2 모듈이 urllib 패키지에 통합되었습니다. 또한, 당신이 가장 좋아하는 모든 것이 Python 3의 urllib 모듈에 지속적으로 나타나게됩니다._opener () 메소드, Request 객체, HTTPBasicAuthHandler 및 friends。 파이썬 3의 urllib.parse 모듈은 원래 파이썬 2의 urlparse 모듈의 모든 해독 함수를 포함합니다. urllib.robotparse 모듈은 robots.txt 파일을 분석한다. HTTP 리디렉션 및 다른 상태 코드를 처리하는 FancyURLopener 클래스는 Python 3의 urllib.request 모듈에서 여전히 유효합니다. △ urlencode (() 함수는 urllib.parse로 옮겨졌습니다. Request 객체는 urllib.request에서 여전히 유효하지만 HTTPError와 같은 상수는 urllib.error으로 옮겨졌습니다. 제가 2to3가 여러분의 함수 호출을 다시 쓸 수 있다고 언급했나요? 예를 들어, 만약 여러분이 파이썬 2의 코드에서 urllib 모듈을 가져와 urllib.urlopen () 함수를 호출하면, 2to3는 동시에 import 문장과 함수 호출을 수정합니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import urllib print urllib.urlopen(’http://diveintopython3.org/‘).read() | import urllib.request, urllib.parse, urllib.error print(urllib.request.urlopen(’http://diveintopython3.org/‘).read()) |
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import dbm | import dbm.ndbm |
| ② | import gdbm | import dbm.gnu |
| ③ | import dbhash | import dbm.bsd |
| ④ | import dumbdbm | import dbm.dumb |
| ⑤ | import anydbm import whichdb |
import dbm |
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import xmlrpclib | import xmlrpc.client |
| ② | import DocXMLRPCServer import SimpleXMLRPCServer |
import xmlrpc.server |
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | try: import cStringIO as StringIO except ImportError: import StringIO |
import io |
| ② | try: import cPickle as pickle except ImportError: import pickle |
import pickle |
| ③ | import _builtin_ | import builtins |
| ④ | import copy_reg | import copyreg |
| ⑤ | import Queue | import queue |
| ⑥ | import SocketServer | import socketserver |
| ⑦ | import ConfigParser | import configparser |
| ⑧ | import repr | import reprlib |
| ⑨ | import commands | import subprocess |
1, 파이썬 2에서, 당신은 보통 이렇게 합니다. 먼저 cStringIO를 StringIO의 대안으로 가져오려고 시도합니다. 실패하면 StringIO를 가져오십시오. 2, 파이썬 2에서 가장 빠른 피클 구현을 가져오는 것은 위와 같은 유용한 방법입니다. 파이썬 3에서는 피클 모듈이 자동으로 처리합니다. 3. builtins 모듈은 Python 전체에서 사용되는 범용 함수, 클래스, 그리고 상수를 포함합니다. builtins 모듈의 어떤 함수를 재정의하는 것은 이 범용 함수를 모든 곳에서 재정의하는 것을 의미합니다. 이것은 강력하게 들리지만 동시에 무서운 것입니다. 4, copyreg 모듈은 C 언어로 정의된 사용자 사용자 정의 유형에 pickle 모듈을 지원한다. 5 큐 모듈은 생산자 소비자 큐 (multi-producer, multi-consumer queue) 를 구현한다. 6. socketserver 모듈은 다양한 socket server를 구현하기 위한 일반 기본 클래스를 제공한다. 7, configparser 모듈은INI-style 구성 파일을 분석하기 위해 사용된다. 8, reprlib 모듈은 내장된 함수 repr () 를 재실현하고, 문자열의 길이를 절단하기 전에 표시하는 것을 추가한다. 9. subprocess 모듈은 당신이 하위 프로세스를 만들고, 그들의 파이프에 연결하고, 그들의 반환 값을 가져오도록 허용한다.
패키지는 관련 모듈의 그룹으로 구성된 하나의 개체이다. 파이썬 2에서는 동일한 패키지 내 모듈의 상호 참조를 구현하기 위해 import foo 또는 from foo import Bar를 사용한다. 파이썬 2 인터프리터는 현재 디렉터리에서foo.py를 검색하고 파이썬 검색 경로 ((sys.path) 로 검색한다. 파이썬 3에서는 이 과정이 약간 다릅니다. 파이썬 3에서는 현재 경로에서 검색하지 않고 파이썬의 검색 경로에서 직접 검색한다.
예를 들어, 다음과 같은 패키지를 가지고 있고, 같은 디렉터리에 여러 개의 파일을 가지고 있다고 가정해 봅시다.
chardet/ | +–init.py | +–constants.py | +–mbcharsetprober.py | +–universaldetector.py
이제, universaldetector.py가 constants.py를 전체적으로 가져와야 하고, mbcharsetprober.py의 클래스를 가져와야 한다고 가정해 봅시다. 어떻게 할까요?
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import constants | from .import constants |
| ② | from mbcharsetprober import MultiByteCharSetProber | from .mbcharsetprober import MultiByteCharsetProber |
파이썬 2에서는, 인더레이터는 다음 () 방법을 가지고, 일련의 다음 항목을 반환한다. 파이썬 3에서도 마찬가지이지만, 이제 새로운 범용 함수인 next () 가 있는데, 이 함수는 인더레이터를 인더레이터로 사용합니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | anIterator.next() | next(anIterator) |
| ② | a_function_that_returns_an_iterator().next() | next(a_function_that_returns_an_iterator()) |
|③|class A:
def next(self):
pass|class A:
def next(self):
pass|
|④|class A:
def next(self, x, y):
pass|no change |
|⑤|next = 42
for an_iterator in a_sequence_of_iterators:
an_iterator.next()|next = 42
for an_iterator in a_sequence_of_iterators:
aniterator.next() |
1, 가장 간단한 예로, 당신은 더 이상 인더레이터의 next (() 메소드를 호출하지 않고, 이제 인더레이터 자체를 전 세계 함수 next ((() 에 대수로서 전달합니다.
2. 만약 당신이 반환값이 인더레이터의 함수인 경우, 이 함수를 호출하고 그 결과를 다음 () 함수 (next () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()
3 만약 여러분이 여러분의 클래스를 정의하고 그것을 인수체로 사용한다면, 파이썬 3에서는 특별한 메소드를 정의해서__next
4, 만약 당신이 정의한 클래스에 next () 가 있다면, 그것은 하나 또는 여러 개의 변수를 사용하며, 2to3 실행할 때 그것을 움직이지 않는다. 이 클래스는 next () 메소드가 변수를 가지고 있기 때문에, 이 클래스는 인더레이터로 사용될 수 없다.
5, 이건 좀 복잡해요. 만약 당신이 next라는 로컬 변수를 가지고 있다면, Python 3에서 그 변수의 우선순위는 global 함수 next ((() 보다 높습니다. 이런 경우, 당신은 iterator의 특별한 방법을 호출해야 합니다.next() 의 다음 요소를 가져오기 위해. 아니면, 이 로컬 변수의 이름을 next라고 부르지 않도록 코드를 재구성할 수도 있습니다. 하지만 2to3는 이 일을 하지 않습니다.
파이썬 2에서는 filter() 메소드가 True 또는 False를 반환하는 함수를 사용하여 일련의 각 항목을 검증한 목록을 반환합니다. 파이썬 3에서는 filter() 함수가 목록이 아닌 인더레이터를 반환합니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | filter(a_function, a_sequence) | list(filter(a_function, a_sequence)) |
| ② | list(filter(a_function, a_sequence)) | no change |
| ③ | filter(None, a_sequence) | [i for iin a_sequence if i] |
| ④ | for i in filter(None, a_sequence): | no change |
| ⑤ | [i for iin filter(a_function, a_sequence)] | no change |
1, 가장 간단한 경우, 2to3는 list () 함수를 사용하여 filter () 을 포장합니다. list () 함수는 그것의 매개 변수를 거쳐서 리스트를 반환합니다. 2 , 그러나, filter() 호출이 list() 패키지로 되어있다면, 2to3는 더 이상 처리하지 않습니다, 왜냐하면 이 경우 filter() 의 반환값이 인더레이터인지 여부는 중요하지 않기 때문입니다. 3 , filter ((None, …) 의 이러한 특수한 문법을 처리하기 위해, 2to3는 이러한 호출을 문법적으로 동등한 것에서 리스트 해독으로 변환한다. 4. for 루프는 전체 시퀀스를 거쳐서 더 이상 수정할 필요가 없습니다. 5. 위와 마찬가지로, 수정할 필요가 없으며, 목록 해석은 전체 시퀀스를 거쳐서 filter ((() 가 하나의 인수자를 반환하더라도, 이전 filter ((() 가 리스트를 반환한 것처럼 정상적으로 작동할 수 있다.
filter() 의 변경과 마찬가지로, map() 함수는 이제 하나의 인자를 반환한다。(Python 2에서, 그것은 목록을 반환한다。)
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | map(a_function,‘PapayaWhip’) | list(map(a_function,‘PapayaWhip’)) |
| ② | map(None,‘PapayaWhip’) | list(‘PapayaWhip’) |
| ③ | map(lambda x: x+1,range(42)) | [x+1for x in range(42)] |
| ④ | for i in map(a_function, a_sequence): | no change |
| ⑤ | [i for iin map(a_function,a_sequence)] | no change |
1 , filter () 에 대한 처리와 유사하게, 가장 간단한 경우, 2to3는 map () 호출을 map () 함수로 포장한다. 2 , 특별한 map ((None, …) 문법의 경우, filter ((None, …) 와 비슷하게, 2to3는 list (() 를 사용하는 동등값 호출으로 변환합니다. 3 , 만약 map () 의 첫 번째 인수가 lambda 함수라면, 2to3는 그것을 대등하게 리스트 해독으로 변환한다. 4 , 전체 서열을 거쳐가는 for 루프를 변경할 필요가 없습니다. 5. 다시 한번, 여기에 수정할 필요가 없습니다. 왜냐하면 목록 해석은 전체 시퀀스를 거쳐서 map () 의 반환값이 목록이 아닌 인더레이터일지라도 정상적으로 작동할 수 있기 때문입니다.
파이썬 3에서는, reduce (~) 함수가 글로벌 네임스페이스에서 제거되었으며, fucntools 모듈에 배치되었습니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | reduce(a, b, c) | from functools import reduce reduce(a, b, c) |
파이썬 2에는 apply () 라는 범용 함수가 있는데, 이는 함수 f와 리스트를 사용한다.[a, b, c] 의 arguments로, f ((a, b, c) 를 반환한다. 또한, 이 함수를 직접 호출하여, 목록 앞에 별자리 (((를 추가할 수도 있다.*) 가 arguments로 전달되어 동일한 작업을 수행한다. 파이썬 3에서는, apply() 함수가 더 이상 존재하지 않는다. 별자리 표기법을 사용해야 한다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | apply(a_function, a_list_of_args) | a_function(*a_list_of_args) |
| ② | apply(a_function, a_list_of_args, a_dictionary_of_named_args) | a_function(*a_list_of_args,**a_dictionary_of_named_args) |
| ③ | apply(a_function, a_list_of_args+ z) | a_function(*a_list_of_args+ z) |
| ④ | apply(aModule.a_function, a_list_of_args) | aModule.a_function(*a_list_of_args) |
1, 가장 간단한 형태는[a, b, c]과 같이) 전에 별자리를 추가하여 함수를 호출한다. 이것은 파이썬 2의 apply ((() 함수와 동등하다. 2, 파이썬 2에서, apply() 함수는 실제로 3개의 변수를 가져갈 수 있습니다: 함수, 변수 목록, 이름 된 변수들의 사전. 파이썬 3에서는, 변수 목록에 별을 추가하여), 사전 이름 매개 변수 앞에 두 개의 별자리를 추가합니다.**) 같은 효과를 얻으려면 3 연산자+는 연산자보다 우선순위가 높은 연산자 목록의 기능으로 사용된다., 그래서 a_list_of_args + z 주위에 추가 괄호를 추가할 필요가 없습니다. 4, 2to3 스크립트는 복잡한 apply () 호출을 변환할 수 있을 정도로 지능이 높으며, 이중에는 가져오기 모듈의 함수를 호출하는 것도 포함된다.
파이썬 2에서는, intern() 함수의 역할을 하나의 문자열에 사용해서 그 기능을 제한할 수 있다. 파이썬 3에서는, intern() 함수가 sys 모듈로 옮겨졌다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | intern(aString) | sys.intern(aString) |
print 문장이 파이썬 3에서 함수가 된 것처럼, exec 문장도 마찬가지입니다. △ exec () 함수는 임의의 파이썬 코드를 포함하는 문자열을 arguments로 사용하고, 그 다음에 문장이나 표현을 실행하는 것처럼 실행합니다. △ exec () 는 eval () 와 비슷하지만, exec () 는 더 강력하고 더 기교적입니다. △ eval () 함수는 단일 표현만을 실행할 수 있지만, exec () 는 여러 문장을 실행하고, 가져오기, 가져오기, 함수 선언을 수행합니다.
| Notes | Python 2 | Python 3 |
|---|
|①|exec codeString|exec(codeString) |②|exec codeString in a_global_namespace|exec(codeString, a_global_namespace)| |③|exec codeString in a_global_namespace, a_local_namespace|exec(codeString, a_global_namespace,a_local_namespace)| 1, 가장 간단한 형태로, exec ((() 는 이제 function이므로, statement이 아니므로, 2to3는 이 문자열 형태의 코드를 parentheses로 둘러싸게 됩니다. 2, 파이썬 2의 exec 문장은 네임스페이스를 지정할 수 있고, 코드는 이 전 세계 객체들로 구성된 개인 공간에서 실행된다. 2. 파이썬 3도 이와 같은 기능을 가지고 있다. 당신은 이 네임스페이스를 exec () 함수에 두 번째 변수로 전달할 뿐이다. 3 , 더욱 신기하게도, Python 2의 exec 문장은 또한 로컬 네임스페이스를 지정할 수 있습니다 (예를 들어, 함수에서 선언된 변수). Python 3에서는 exec () 함수가 이러한 기능을 가지고 있습니다.
이전 exec 문장과 마찬가지로, Python 2의 execfile 문장은 Python 코드를 실행하는 것처럼 문자열을 사용할 수 있습니다. exec는 문자열을 사용하지만 execfile는 파일을 사용합니다. Python 3에서는 execfile 문장이 삭제되었습니다. 만약 당신이 파일의 Python 코드를 실행하고 싶지만 그것을 가져오기를 원하지 않는다면, 당신은 파일을 열고 그 내용을 읽고 compile () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | execfile(‘a_filename’) | exec(compile(open(‘a_filename’).read(),‘a_filename’,‘exec’)) |
파이썬 2에서, 임의의 객체에 대한 문자열 표현을 얻기 위해, 객체를 반사호에 감싸는 방법이 있습니다.x) 의 특수한 문법. 파이썬 3에서는 이러한 기능이 여전히 존재하지만, 당신은 이 문자열을 얻기 위해 더 이상 반사호를 사용할 수 없습니다. 당신은 범용 함수 repr을 사용해야 합니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | `x` | repr(x) |
| ② | `‘PapayaWhip’ + `2`` | repr(‘PapayaWhip’+ repr(2)) |
파이썬 2에서 파이썬 3로, 이변을 포착하는 문법이 약간 바뀌었습니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | try: import mymodule except ImportError, e pass |
try: import mymodule except ImportError as e: pass |
| ② | try: import mymodule except (RuntimeError, ImportError), e pass |
try: import mymodule except (RuntimeError, ImportError) as e: pass |
| ③ | try: import mymodule except ImportError: pass |
no change |
| ④ | try: import mymodule except: pass |
no change |
1 , 파이썬 2의 예외 타입 뒤에 코마를 추가하는 것과 비교하여, 파이썬 3은 새로운 키워드를 사용합니다. as。 2 , as 키워드는 한 번에 여러 종류의 특이성을 포착하는 경우에도 사용할 수 있습니다. 3. 만약 당신이 예외를 잡았지만, 예외 객체 자체를 접근하는 것은 신경 쓰지 않는다면, 파이썬 2와 파이썬 3의 문법은 똑같습니다. 4 마찬가지로, 만약 당신이 모든 예외를 잡기 위해 를 사용한다면, 파이썬 2와 파이썬 3의 문법은 동일하다. 5. 모듈을 가져오면 (또는 대부분의 다른 경우) 절대 이런 방법을 사용해서는 안 됩니다. 그렇지 않으면 프로그램이 KEYBOARDINTERRUPT (이용자가 Ctrl-C를 누르면 프로그램을 중단하는 경우) 와 같은 예외를 잡을 수 있으므로 디버팅이 더 어려워집니다.
파이썬 3에서는 사용자 정의 예외의 문법에 약간의 변화가 있습니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | raise MyException | unchanged |
| ② | raise MyException,‘error message’ | raise MyException(‘error message’) |
| ③ | raise MyException,‘error message’, a_traceback | raise MyException(‘errormessage’).with_traceback(a_traceback) |
| ④ | raise ‘error message’ | unsupported |
1, 사용자 정의 오류 메시지가 없는 예외를 니다. 이 가장 간단한 형태로, 문법이 바뀌지 않습니다. 2, 사용자 정의 오류 메시지가 있는 예외를 던지려고 할 때, 변화가 분명합니다. Python 2는 예외와 오류를 코마로 구분하고, Python 3는 오류를 예외에 매개 변수로 전달합니다. 3, 파이썬 2는 더 복잡한 문법을 지원하여 사용자 정의 된 스택 트레이스 (stack trace) 를 가진 예외를 던집니다. 파이썬 3에서도 그렇게 할 수 있지만, 문법은 완전히 다릅니다. 4. 파이썬 2에서는, 예외의 종류가 없는 예외를 던질 수 있습니다. 단지 하나의 예외 메시지가 있을 뿐입니다. 파이썬 3에서는, 이 형식이 더 이상 지원되지 않습니다. 2to3는 이 문법을 자동으로 수정할 수 없다는 것을 경고할 것입니다.
파이썬 2에서 생성자는 throw () 방법을 가지고 있다. a_generator.throw () 를 호출하면 생성자가 정지될 때 예외를 던지고 다음 생성자 함수가 얻는 값을 반환한다. 파이썬 3에서는 이 기능이 여전히 사용 가능하지만, 문법적으로는 조금 다르다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | a_generator.throw(MyException) | no change |
| ② | a_generator.throw(MyException,‘error message’) | a_generator.throw(MyException(‘error message’)) |
| ③ | a_generator.throw(‘error message’) | unsupported |
1, 가장 간단한 형태로, 생성자는 사용자 정의 오류 메시지가 없는 예외를 던집니다. 이 경우, 파이썬 2에서 파이썬 3의 문법에는 변화가 없습니다. 2. 생성기가 사용자 정의 오류 메시지를 가진 예외를 던지면, 이 오류 정보를 문자열 (error string) 로 예외 클래스에 전달하여 이를 인스턴스화해야 한다. 3 , 파이썬 2는 또한 예외 정보만 던지는 예외를 지원한다. 파이썬 3는 이러한 문법을 지원하지 않으며, 2to3는 이 코드를 수동으로 수정해야 한다는 경고 메시지를 표시한다.
파이썬 2에서는, 특정 범위의 숫자를 얻는 두 가지 방법이 있습니다: range () 는 리스트를 반환하고, range () 는 반복자를 반환합니다. 파이썬 3에서는 range () 는 반복자를 반환하고, xrange () 는 더 이상 존재하지 않습니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | xrange(10) | range(10) |
| ② | a_list = range(10) | a_list = list(range(10)) |
| ③ | [i for iin xrange(10)] | [i for iin range(10)] |
| ④ | for i in range(10): | no change |
| ⑤ | sum(range(10)) | no change |
1, 가장 간단한 경우, 2to3는 xrange를 range로 변환합니다. 2, 만약 당신의 Python 2 코드가 range () 를 사용한다면, 2to3는 당신이 리스트가 필요하는지, 아니면 이 필요하는지 모른다. 주의를 위해, 2to3는 실수를 보고, list () 를 사용하여 range () 의 반환값을 리스트 타입으로 강제 변환한다. 3 , 만약 리스트 해설에 xrange () 함수가 있다면, 리스트 해설은 인더레이터에도 똑같이 유효하기 때문에, 그것의 반환값을 리스트로 변환할 필요가 없다. 4 , 비슷하게, for 순환은 또한 iterator에 작용할 수 있습니다, 그래서 여기에도 아무것도 변경되지 않습니다. 5 , 함수 sum ((() 는 인더레이터에 작용할 수 있으므로 2to3도 여기서 수정하지 않습니다. 이는 view ((view) 으로 반환되는 값이 목록이 아닌 사전 클래스 방법과 마찬가지로, min (((), max (((), sum (((), list (((), tuple (((), set (((), sorted (((), any (((), all ((() 에 적용됩니다.
파이썬 2에는 명령줄에서 사용자 입력을 요청하는 두 개의 범용 함수가 있습니다. 첫 번째는 input () 이라고 불리며, 사용자가 파이썬 표현을 입력하고 결과를 반환하는 것을 기다립니다. 두 번째는 raw_input () 이라고 불리며, 사용자가 입력한 것은 반환합니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | raw_input() | input() |
| ② | raw_input(‘prompt’) | input(‘prompt’) |
| ③ | input() | eval(input()) |
1, 가장 간단한 형태, raw_input ((() 는 input ((() 으로 대체된다. 2, 파이썬 2에서, raw_input() 함수는 힌트를 하나의 인자로 지정할 수 있다. 파이썬 3에서는 이 기능을 유지한다. 3, 만약 정말 사용자가 파이썬 표현을 입력하고 결과를 계산하기를 원한다면, input ((() 함수를 호출하여 반환값을 eval ((() 에게 전달할 수 있습니다.
파이썬 2에서는 함수의 코드가 함수 자체의 특수 속성에 액세스 할 수 있습니다. 파이썬 3에서는 일관성을 위해 이러한 특수 속성이 이름을 변경했습니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | a_function.func_name | a_function._name_ |
| ② | a_function.func_doc | a_function._doc_ |
| ③ | a_function.func_defaults | a_function._defaults_ |
| ④ | a_function.func_dict | a_function._dict_ |
| ⑤ | a_function.func_closure | a_function._closure_ |
| ⑥ | a_function.func_globals | a_function._globals_ |
| ⑦ | a_function.func_code | a_function._code_ |
1、name 속성 ((原func_name) 은 함수의 이름을 포함한다. 2、docattribute (원래의 funcdoc) 는 함수 소스코드에서 정의한 문서 문자열을 포함합니다 (docstring) 3、defaults 속성 ((원본func_defaults) 은 파라미터의 기본값을 저장하는 모음이다. 4、dictattribute ([[원래_func_dict]]) 는 임의 함수 속성을 지원하는 이름 공간이다. 5、closure 속성 (proper function_closure) 은 cell 객체로 구성된 모음으로, 함수가 자유 변수에 대한 묶음을 포함한다. 6、globals 속성 ((원래의 function_globals) 은 모듈의 글로벌 네임스페이스에 대한 참조이며, 함수 자체는 이 네임스페이스에서 정의된다. 7、code 속성 ((원본func_code) 은 컴파일된 함수체를 나타내는 코드 객체이다.
파이썬 2에서 파일 객체에는 xreadlines () 메소드가 있는데, 이 메소드는 하나의 인더레이터를 돌려서 한 번에 파일의 한 줄을 읽는다. 이것은 for 루프에서 특히 유용하다. 사실, 파이썬 2의 후속 버전은 파일 객체 자체에 이러한 기능을 추가했다.
파이썬 3에서는, xreadlines () 메소드가 더 이상 사용되지 않습니다. 2to3는 간단한 상황을 해결할 수 있지만, 몇몇의 가장자리 사례는 수동 개입이 필요합니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | for line in a_file.xreadlines(): | for line in a_file: |
| ② | for line in a_file.xreadlines(5): | no change (broken) |
1, 만약 이전에 xreadlines () 의 임수를 호출했다면, 2to3는 그것을 파일 객체로 변환합니다. 파이썬 3에서는, 이 변환 후의 코드는 이전과 같은 작업을 수행합니다. 파일의 한 줄을 한 번 읽고, for 루프의 루프체를 실행합니다. 2 만약 당신이 이전에 xreadlines () 를 호출하는 arguments ((readlines () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()_io.TextIOWrapper’ object has no attribute ‘xreadlines’。 당신은 수동으로 xreadlines를 readlines로 바꾸어 코드가 Python 3에서 작동하도록 할 수 있다。
파이썬 2에서는 익명 램브다 함수를 정의할 수 있는데, 이는 램브다 함수의 원소수를 매개로 함으로써 실제로 여러 개의 변수를 수용할 수 있다. 사실, 파이썬 2의 인터프리터는 이 램브다 함수를 해독하여 명명된 인수 (named arguments) 로 풀어내고, 그 다음에는 램브다 함수 (lambda function) 에서 명칭으로 참조할 수 있다. 파이썬 3에서는 여전히 램브다 함수의 인수로서 한 개의 메타그램을 전달할 수 있지만, 파이썬 인터프리터는 그것을 명명된 인수 (naming argument) 로 해독하지 않는다. 각 인수를 위치 인덱스 (positional index) 로 참조해야 한다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | lambda (x,): x+ f(x) | lambda x1: x1[0]+f(x1[0]) |
| ② | lambda (x, y): x+f(y) | lambda x_y: x_y[0]+f(x_y[1]) |
| ③ | lambda (x,(y,z)): x+ y+ z | lambda x_y_z: x_y_z[0]+x_y_z[1][0]+ x_y_z[1][1] |
| ④ | lambda x, y, z: x+y + z | unchanged |
1, 만약 여러분이 lambda 함수를 정의했다면, 그것은 하나의 요소를 포함하고 있는 모음집을 arguments로 사용했습니다. Python 3에서, 그것은 x1까지 포함된 모음집으로 변환됩니다.[0]에서 인용된 lambda 함수。x1은 2to3 스크립트가 원래 모형의 명명 변수를 기반으로 자동으로 생성한다。 2 램브다 함수 (lambda function) 는 x_y로 변환되며, 두 개의 위치 변수를 가진 x_y라는 두 개의 요소를 포함하는 소수 ([x, y]) 를 사용합니다.[0]과 x_y[1]。 3, 2to3 스크립트는 심지어 드 이름 변수를 사용하는 모형의 lambda 함수를 변수로 처리할 수 있다. 생성된 결과 코드는 약간 읽기 힘들지만, 파이썬 3에서는 원래 코드가 파이썬 2에서는 동일한 효과를 낸다. 4. 여러 개의 변수를 사용하는 lambda 함수를 정의할 수 있다. 만약 괄호가 괄호 주변에 있지 않다면, Python 2는 그것을 여러 개의 변수를 포함하는 lambda 함수로 간주한다. 이 lambda 함수체에서는 다른 유형의 함수에서와 마찬가지로 이름을 통해 이러한 변수를 참조한다. 이 문법은 Python 3에서도 여전히 유효하다.
파이썬 2에서, 클래스 메소드는 그들의 클래스 오브젝트를 정의하는 () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | aClassInstance.aClassMethod.im_func | aClassInstance.aClassMethod._func_ |
| ② | aClassInstance.aClassMethod.im_self | aClassInstance.aClassMethod._self_ |
| ③ | aClassInstance.aClassMethod.im_class | aClassInstance.aClassMethod._self_._class_ |
파이썬 2에서, 여러분은 자신만의 클래스를 만들 수 있고, 이를 boolean 컨텍스트에서 사용할 수 있습니다. 예를 들어, 여러분은 이 클래스를 인스턴스화할 수 있고, 이 인스턴스 오브젝트를 if 문장에 사용할 수 있습니다. 이 목적을 위해, 여러분은 특별한nonzero() 메소드는 True 또는 False를 반환합니다. 이 메소드는 BULL 상의 컨텍스트에 있는 인스턴스 객체가 있을 때 호출됩니다. 파이썬 3에서는 여전히 동일한 기능을 수행할 수 있지만 이 특별한 메소드의 이름은bool()。
| Notes | Python 2 | Python 3 |
|---|
|①|class A:
def nonzero(self):
pass|class A:
def bool(self):
pass
|②|class A:
def nonzero(self, x, y):
pass|no change|
1. BULL 상의 컨텍스트에서 클래스 오브젝트를 사용할 때, 파이썬 3은 호출합니다.bool_ () 은nonzero()。
하지만, 만약 두 개의 변수를 사용하는nonzero__() 방법, 2~3 스크립트는 당신이 정의한 이 방법이 다른 용도로 사용될 것이라고 가정하고, 따라서 코드를 수정하지 않는다.
파이썬 2와 파이썬 3 사이에, 8진 (octa) 숫자를 정의하는 문법에는 약간의 변화가 있다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | x = 0755 | x = 0o755 |
긴整型과整型이 통합됨에 따라, sys.maxint 상수는 더 이상 정확하지 않습니다。 그러나 이 값이 특정 플랫폼의 능력을 검출하는 데 유용하기 때문에, Python 3에서 보존되어 sys.maxsize。로 명칭이 변경되었습니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | from sys importmaxint | from sys importmaxsize |
| ② | a_function(sys.maxint) | a_function(sys.maxsize) |
1 maxint가 maxsize가 됩니다. 2 모든 sys.maxint가 sys.maxsize로 바뀌었다.
파이썬 2에서는, 객체가 호출될 수 있는지 확인하기 위해 라는 범용 함수를 사용할 수 있습니다. 파이썬 3에서는, 이 범용 함수는 취소되었습니다. 객체가 호출될 수 있는지 확인하기 위해, 특수 방법을 확인할 수 있습니다._call의 존재.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | callable(anything) | hasattr(anything,’_call_’) |
파이썬 2에서, 범용 함수 zip() 는 임의의 여러 개의 서열을 arguments로 사용할 수 있으며, 이는 모형으로 구성된 리스트를 반환한다. 첫 번째 모형은 각 서열의 첫 번째 요소를 포함하고; 두 번째 모형은 각 서열의 두 번째 요소를 포함하고; 순차적으로 아래로 이동한다. 파이썬 3에서, zip() 는 리스트가 아닌 인더레이터를 반환한다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | zip(a, b, c) | list(zip(a, b, c)) |
| ② | d.join(zip(a, b, c)) | no change |
가장 간단한 형태로, list () 함수를 호출하여 zip () 함수의 반환 값을 복원할 수 있습니다. list () 함수는 이 zip () 함수가 반환하는 인더레이터를 거쳐서 결과를 반환합니다. 이미 일련의 모든 요소를 거쳐가는 컨텍스트 환경에서 (예: 여기에 join () 메소드를 호출하는 것과 같이), zip () 를 반환하는 이더레이터는 정상적으로 작동할 수 있다. 2to3 스크립트는 이러한 상황을 감지하고, 당신의 코드를 변경하지 않는다.
파이썬 2에서 StandardError는 StopIteration, GeneratorExit, KeyboardInterrupt, SystemExit 이외의 모든 다른 내장된 예외의 기본 클래스입니다. 파이썬 3에서는 StandardError가 삭제되었으며 예외를 사용합니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | x =StandardError() | x =Exception() |
| ② | x =StandardError(a, b, c) | x =Exception(a, b, c) |
types 모듈의 다양한 상수는 객체의 유형을 결정하는 데 도움이 됩니다. Python 2에서는 dict 및 int와 같은 모든 기본 데이터 유형을 나타내는 상수를 포함합니다. Python 3에서는 이러한 상수는 이미 삭제되었습니다. 기본 타입의 이름을 사용하여 대체해야합니다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| types.UnicodeType | str | |
| types.StringType | bytes | |
| types.DictType | dict | |
| types.IntType | int | |
| types.LongType | int | |
| types.ListType | list | |
| types.NoneType | type(None) | |
| types.BooleanType | bool | |
| types.BufferType | memoryview | |
| types.ClassType | type | |
| types.ComplexType | complex | |
| types.EllipsisType | type(Ellipsis) | |
| types.FloatType | float | |
| types.ObjectType | object | |
| types.NotImplementedType | type(NotImplemented) | |
| types.SliceType | slice | |
| types.TupleType | tuple | |
| types.TypeType | type | |
| types.XRangeType | range |
types.StringType는 바이트로 매핑되는데, str이 아닌데, 왜냐하면 Python 2의 string는 실제로는 어떤 문자를 이용한 바이트의 연속일 뿐이기 때문이다.
isinstance() 함수는 객체가 특정 클래스 (class) 또는 타입 (type) 의 인스턴스인지 여부를 검사한다. 파이썬 2에서는, 타입 (types) 으로 구성된 모형을 isinstance (in) 에 전달할 수 있으며, 만약 객체가 모형의 임의의 타입이라면, 함수는 True를 반환한다. 파이썬 3에서는, 당신은 여전히 이것을 할 수 있지만, 하나의 타입을 두 번 변수로 전달하는 것은 권장되지 않는다.
| Notes | Python 2 | Python 3 |
|---|---|---|
| isinstance(x,(int,float,int)) | isinstance(x,(int,float)) |
파이썬 2에는 두 가지 문자열 유형이 있습니다: 유니코드 코딩된 �