중화사전망 - 자전 검색 - 파이썬 3.4 는 노트 3.x 와 2.x 의 차이점을 배워 지속적으로 업데이트한다.

파이썬 3.4 는 노트 3.x 와 2.x 의 차이점을 배워 지속적으로 업데이트한다.

파이썬 3.4 학습 노트 (3.x 와 2.x 의 차이점

2.x 에서: html 을 인쇄합니다. 3.x 에서는 인쇄 (html) 로 변경해야 합니다.

Urllib2 가져오기

ImportError:' urllib2' 라는 모듈이 없습니다

파이썬 3.x 에서는 urllib2 대신 urllib.request 를 사용합니다.

스레드를 가져옵니다

ImportError:' thread' 라는 모듈이 없습니다

Python3.x 에서는 thread 대신 _thread (앞에 밑줄 표시) 를 사용합니다.

2.x 에서 Exception 예외, e: 3.x 에서 except (예외):

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

인쇄 기능

Print 구문은 Python 3 의 작은 변화이므로 널리 알려져 있어야 하지만, Python 2 의 print 문은 Python 3 에서 print () 함수로 대체되므로 출력해야 하는 객체는 Python 3 에서 괄호로 묶어야 합니다.

파이썬 2 에서도 추가 괄호를 사용할 수 있습니다. 반면 Python 3 의 print 함수를 Python2 에서 괄호로 묶지 않고 호출하려는 경우 SyntaxError 가 트리거됩니다.

파이썬 2.7.6

Python, python_version () 을 인쇄합니다

인쇄 "안녕, 세상! 클릭합니다

인쇄 ("안녕, 세상!" " ) 을 참조하십시오

인쇄 "텍스트"; [한 줄에 더 많은 텍스트 인쇄] 를 인쇄합니다

출력:

안녕, 세상!

안녕, 세상!

텍스트 같은 줄에 더 많은 텍스트를 인쇄합니다

--

파이썬 3.4.1

인쇄 ('파이썬', 파이썬 _ 버전 ())

인쇄 ("안녕, 세상!" " ) 을 참조하십시오

Print("some text, ",end=" ")

인쇄 ("한 줄에 더 많은 텍스트 인쇄")

출력:

안녕, 세상!

일부 텍스트, 한 줄에 더 많은 텍스트 인쇄

인쇄 "안녕, 세상! 클릭합니다

파일 "& ltipython-input-3-1 39a7c5835bd >, 줄1

인쇄 "안녕, 세상! 클릭합니다

~

구문 오류: 잘못된 구문

참고: 파이썬에서 괄호 유무에 관계없이' 헬로 월드' 를 출력하는 것은 정상입니다.

그러나 여러 객체가 괄호 안에 동시에 출력되면 tuple 이 만들어집니다. Python 2 에서 print 는 함수 호출이 아니라 명령문이기 때문입니다.

Python, python_version () 을 인쇄합니다

인쇄 ('a',' b')

A',' b' 인쇄

파이썬 2.7.7

('갑',' 을')

B 1 개

--

정수 나누기

사람들은 종종 정수 나눗셈에서 파이썬 3 의 변화를 무시하기 때문에 (잘못 쓰면 구문 오류가 트리거되지 않음), 파이썬 2 에서 코드를 이식하거나 파이썬 3 의 코드를 실행할 때 이런 변화에 각별히 주의해야 한다.

그래서 파이썬의 코드를 피하기 위해 파이썬 3 스크립트의 3/2 대신 플로트 (3)/2 또는 3/2.0 을 사용하려고 합니다.

2 환경으로 인해 오류가 발생할 수 있습니다 (또는 반대로 Python 2 스크립트에서 from __future__ import division 을 사용하여 Python 사용).

3) 나누기.

파이썬 2.7.6

3/2 = 1

3 // 2 = 1

3/2.0 = 1.5

3 // 2.0 = 1.0

파이썬 3.4.1

3/2 = 1.5

3 // 2 = 1

3/2.0 = 1.5

3 // 2.0 = 1.0

--

통일코드

Python 2 에는 별도의 유니코드 () 함수를 통해 유니코드 유형으로 변환할 수 있는 ascii 기반 str () 유형이 있지만 byte 유형은 없습니다.

파이썬 3 에는 유니코드 (bytes-8) 문자열과 바이트 및 바이트 클래스라는 두 바이트 클래스가 있습니다.

파이썬 2.7.6

인쇄 유형 (유니코드 ('python3 문자열 유형과 유사'))

& lt "유니코드" > 를 입력합니다

인쇄 유형 (b' 바이트 유형이 존재하지 않음')

& lt "문자열" 유형>

인쇄 "그들은 정말 동일 합니다."

그들은 정말 똑같다.

플롯 유형 (bytearray (b'bytearray 가 이상하게 존재하긴 하지만'))

& lt "bytearray”& gt;; 를 입력합니다

파이썬 3.4.1있음 & ltclass' bytes'>

Print('and Python', python_version (), end= "")

Print(' also has', type(bytearray(b'bytearrays'))

파이썬 3.4.1도< 클래스' bytearray”& gt;;

1

데이터에 문자열'+b' 바이트' 를 추가할 수 없습니다

--

유형 오류 역추적 (최근 호출)

& ltipython-input-13-d3e8942ccf81> & lt 모듈> () 에서

-> 1' 데이터에 문자열'+b' 바이트' 를 추가할 수 없습니다

TypeError:' bytes' 객체를 암시적으로 str 로 변환할 수 없습니다

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

파이썬 2.4 와 파이썬 3.0 의 비교

1. 문에 함수의 변경 사항을 인쇄합니다.

원문: 인쇄 1, 2+3

다음으로 변경: 인쇄 (1, 2+3)

둘째, range 와 xrange

Original: range (0,4) 결과는 목록 [0, 1, 2,3] 입니다.

변경 대상: 리스트 (범위 (0,4))

원문: xrange( 0, 4) 는 for 루프의 변수 제어에 적용됩니다.

변경 대상: 범위 (0,4)

셋째, 문자열

Original: 문자열은 8 비트 문자열로 저장됩니다.

바꿀 내용: 문자열은 16 비트 유니코드 문자열로 저장됩니다.

넷째, try except 문의 변경

2.x 에서 Exception 예외, e: 3.x 에서 except (예외):

다섯째, 파일 열기

원본: 파일 (...)

또는 열기 (...)

바꿀 내용:

Open (...) 만 사용할 수 있습니다

6. 키보드에서 문자열을 입력합니다.

Original: raw_input ("프롬프트 정보")

변경 대상: 입력 (프롬프트 정보)

7, 바이트 데이터 유형

Bytes 객체는 변경되지 않는 배열입니다. 이들 항목은 0<= x & lt256.

Bytes 는 각 요소가 0~255 범위의 8 비트 바이트인 "바이트 배열" 객체로 간주할 수 있습니다.

파이썬 3.0 에서는 문자열이 유니코드로 저장되기 때문에 이진 파일을 작성할 때 문자열을 직접 쓰거나 읽을 수 없으며 어떤 식으로든 바이트 시퀀스로 인코딩해야 쓸 수 있습니다.

(a) 문자열 인코딩 (encode) 은 바이트입니다.

예: s = "장삼abc12"

B = s.encode (인코딩 방법)

# b 는 바이트 유형의 데이터입니다.

# 일반적으로 사용되는 인코딩 방식은' UFT- 16',' UTF-8',' GBK',' GB 23 12',' ASCII' 입니다

# 참고: 지정된 인코딩 방법으로 문자열을 인코딩할 수 없을 때 예외가 발생합니다.

(2) 바이트가 문자열로 디코딩됩니다.

S = "장삼ABC12"

B = s.encode( "gbk") # String s gbk 형식으로 인코딩된 바이트 시퀀스.

S 1 = b.decode("gbk") # 바이트 시퀀스 b 를 gbk 형식의 문자열로 디코딩합니다.

# Description, 바이트 시퀀스를 지정된 인코딩 형식으로 디코딩할 수 없을 때 예외가 발생합니다.

(3) 사용 방법의 예

# 인코딩 =gbk

F = 켜기 ("c:\\ 1234.txt", "WB")

S = "장사 ABCD 1234"

#-

# 파이썬 2.4 에서는 다음과 같이 쓸 수 있습니다.

# F. 쓰기

# 하지만 파이썬 3.0 에서 예외가 발생했습니다.

#-

B = S. encode ("gbk")

F. 쓰기 (b)

F.close ()

입력 ("? ) 을 참조하십시오

파일 읽기의 예:

# 인코딩 =gbk

F = open("c:\\ 1234.txt ","Rb ")

F.seek (0,2) # 파일 끝으로 이동합니다.

N = f.tell() # 파일의 바이트 수를 읽습니다.

파일의 시작 부분으로 다시 이동합니다.

B = f.read( n)

#-

# B 는 파이썬 2.4 의 문자열 유형입니다.

# 파이썬 3.0 의 b 가 바이트가 되기를 바랍니다.

# 따라서 지정된 인코딩 방법에 따라 인코딩을 확인해야 합니다.

#-

S = b.decode("gbk ") 입니다

인쇄물

#-

# python 2.4 에서 print s 또는 print s 를 작성할 수 있습니다.

# python 3.0 으로 인쇄물을 작성해야 합니다.

#-

F.close ()

입력 ("? ) 을 참조하십시오

실행 후 다음과 같이 표시되어야 합니다.

장리삼사 ABCD 1234

(4) 바이트 시퀀스가 형성되면 그 내용은 변경할 수 없습니다. 예를 들면 다음과 같습니다.

S="ABCD "

B = S. encode ("gbk")

인쇄 b[0] # 디스플레이 65

B[0] = 66

# 이 문을 실행하는 동안 예외가 발생했습니다.' bytes' 객체는 항목 할당을 지원하지 않습니다.

여덟, chr( K) 및 주문 (c)

파이썬 2.4.2 이전

Chr( K) 는 코드 K 를 문자로 변환하고 K 의 범위는 0 ~ 255 입니다.

Ord( c) 는 단일 문자의 코드를 가져옵니다. 반환 값 범위는 0 에서 255 까지입니다.

파이썬 3.0

Chr( K) 는 코드 K 를 문자로 변환하고 K 의 범위는 0 ~ 65535 입니다.

Ord( c) 는 단일 문자의 코드를 가져옵니다. 반환 값 범위는 0 에서 65535 까지입니다.

9, 나누기 연산자

파이썬 2.4.2 이전

10/3 결과는 3 입니다.

파이썬 3.0

10/3 의 결과는 3.30000000005 입니다

10 // 3 결과 3

X. 바이트 배열 객체-신규

(1) 초기화

A = 바이트 배열 (10)

# a 는 10 바이트로 구성된 배열이며 배열의 각 요소는 1 바이트이며 유형은 int 를 차용합니다.

# 이 시점에서 각 요소의 초기 값은 0 입니다.

(2) 바이트 배열은 변수입니다.

A = 바이트 배열 (10)

A[0] = 25

# 대입문을 사용하여 해당 요소를 변경할 수 있지만 할당은 0 에서 255 사이여야 합니다.

(3) 바이트 배열의 슬라이스는 여전히 바이트 배열입니다.

(4) 문자열을 바이트 배열로 변환합니다.

# 인코딩 =gbk

S = "안녕하세요"

B = s.encode( "GBK") # 첫째, 문자열은 "GBK" 인코딩에 따라 바이트로 변환됩니다.

C = bytearray( b) # 그런 다음 바이트를 바이트 배열로 변환합니다.

너도 쓸 수 있어

C = bytearray ("Hello ","gbk ")

(5) 바이트 배열을 문자열로 변환합니다.

C = bytearray( 4)

C [0] = 65; C [1] = 66; C [2] = 67; C[3]= 68

S = c.decode( "gbk ")

인쇄물

# 표시 예정: ABCD

(6) 바이트 배열은 텍스트 파일을 작성하는 데 사용할 수 있습니다.

# 인코딩 =gbk

F = 켜기 ("c:\\ 1234.txt", "WB")

S = "장사 ABCD 1234"

#-

# 파이썬 2.4 에서는 다음과 같이 쓸 수 있습니다.

# F. 쓰기

# 하지만 파이썬 3.0 에서 예외가 발생했습니다.

#-

B = S. encode ("gbk")

F. 쓰기 (b)

C=bytearray ("왕오", "gbk")

F. 쓰기 (c)

F.close ()

입력 ("? ) 을 참조하십시오