Latest web development tutorials

ความแตกต่างกับรุ่น Python2.x 3 .x

3.0 รุ่นของงูใหญ่มักจะเรียกว่างูหลาม 3000 หรือเพียง Py3k ด้วยความเคารพรุ่นก่อนหน้าของงูใหญ่นี้เป็นรุ่นใหญ่

เพื่อไม่ให้นำภาระมากเกินไป, Python 3.0 ไม่ได้พิจารณาในการออกแบบของความเข้ากันได้ที่ลดลง

สำหรับหลาย ๆ โปรแกรมที่ออกแบบรุ่นก่อนหน้านี้ของงูใหญ่จะไม่ดำเนินการอย่างถูกต้องบน Python 3.0

เพื่อที่จะดูแลของโปรแกรมที่มีอยู่, Python 2.6 เป็นรุ่นระหว่างกาล 2.x หลามโดยใช้ไวยากรณ์พื้นฐานและห้องสมุดคำนึงถึงการโยกย้ายไปยังหลามงูหลาม 3.0 และ 3.0 ช่วยให้การใช้เป็นส่วนหนึ่งของไวยากรณ์ของฟังก์ชั่นที่

โปรแกรมใหม่จะแนะนำให้ใช้งูหลามงูหลาม 3.0 รุ่นไวยากรณ์

เว้นแต่สภาพแวดล้อมการดำเนินการไม่สามารถติดตั้ง Python 3.0 หรือโปรแกรมเองไม่สนับสนุนการใช้งานของบุคคลที่สามห้องสมุดหลาม 3.0 ไม่สนับสนุนบุคคลที่สามห้องสมุดหลาม 3.0 บิด, py2exe, PIL และชอบ

ส่วนใหญ่ห้องสมุดของบุคคลที่สามกำลังพยายามที่จะ Python 3.0 รุ่นที่รองรับ ถ้าไม่ได้ใช้ทันทีหลาม 3.0 ยังแนะนำการพัฒนาของการเข้ากันได้ Python 3.0 รุ่นของโปรแกรมและจากนั้นใช้ Python 2.6, Python 2.7 จะดำเนินการ

การเปลี่ยนแปลงในหลาม 3.0 เป็นส่วนใหญ่ในพื้นที่ดังต่อไปนี้:


ฟังก์ชั่นการพิมพ์

พิมพ์คำสั่งจะหายไปแทนที่ด้วยการพิมพ์ () ฟังก์ชัน งูหลาม 2.6 และ Python 2.7 การสนับสนุนในส่วนของรูปแบบของไวยากรณ์การพิมพ์นี้ ในหลาม 2.6 และ Python 2.7 ภายในสามรูปแบบเทียบเท่า:

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

อย่างไรก็ตาม, Python 2.6 ได้จริงสนับสนุนการพิมพ์ใหม่ () ไวยากรณ์:

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

Unicode

งูหลาม 2 มี STR ASCII () พิมพ์ Unicode () เพียงอย่างเดียวไม่ได้เป็นประเภทไบต์

ตอนนี้ในหลาม 3 ในที่สุดเราก็มี Unicode (UTF-8) สตริงและชั้นไบต์ไบต์และ bytearrays

เพราะ 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 / ส่วนเช่นเดียวกับส่วนใหญ่ของเรามีความคุ้นเคยกับภาษาเช่น Java Ah Ah C มีความคล้ายคลึงกับผลของการแบ่งจำนวนเต็มถูกจำนวนเต็มส่วนบางส่วนจะถูกละเว้นสมบูรณ์ทศนิยมส่วนจุดลอยจะยังคงเป็นส่วนหนึ่งของที่ได้รับมา ผลเลขทศนิยม

ใน 3.x หลาม / ส่วนไม่ทำเช่นนั้นและสำหรับการแบ่งระหว่างจำนวนเต็มผลที่จะลอย

2.x หลาม:

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

3.x หลาม:

>>> 1/2
0.5

สำหรับการแบ่ง // ส่วนนี้เรียกว่าการแบ่งชั้นผลลัพธ์จะแบ่งการดำเนินงานโดยอัตโนมัติชั้นเหมือนกันใน 2.x หลามและ Python 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 เปลี่ยนแปลงยกเว้น EXC เป็น var

ไวยากรณ์ยกเว้น (exc1, exc2) เป็น var สามารถจับข้อยกเว้นหลายหมวดหมู่ งูหลาม 2.6 มีการสนับสนุนทั้งไวยากรณ์

  • 1. 2.x ยุคทุกประเภทของวัตถุที่สามารถโยนโดยตรงในยุค 3.x ที่สืบทอดมาจากวัตถุ BaseException สามารถโยน
  • 2. คำสั่งยก 2.x พ่นเครื่องหมายจุลภาคเพื่อแยกประเภทวัตถุและพารามิเตอร์ 3.x ยกเลิกถ้อยคำที่ยอดเยี่ยมนี้โดยตรงเรียก constructor ที่โยนวัตถุสามารถ

ในยุค 2.x, ความผิดปกติในรหัสนอกเหนือไปจากข้อผิดพลาดในการดำเนินการ แต่ยังมักจะบางโครงสร้างการควบคุมเดียวกันควรทำใน 3.x สามารถมองเห็นได้ออกแบบให้การเปลี่ยนแปลงที่ผิดปกติเฉพาะเจาะจงมากขึ้นเฉพาะในข้อผิดพลาด ยกเว้นในกรณีที่การสั่งซื้อที่จะจับคำสั่งในการจัดการ


xrange

สร้างวัตถุซ้ำในหลาม 2 ใน xrange () การใช้งานที่เป็นที่นิยมมาก ตัวอย่างเช่นสำหรับวงหรือรายการ / คอลเลกชัน / comprehensions พจนานุกรม

ประสิทธิภาพการทำงานนี้คือกำเนิดภาพมาก (เช่น. "การประเมินผลขี้เกียจ") แต่ xrange-Iterable เป็นอนันต์หมายถึงไม่ จำกัด ที่คุณสามารถสำรวจ

เพราะขี้เกียจของการประเมินผลของมันไม่เพียง แต่ถ้าคุณไม่สามารถสำรวจครั้งเดียว 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

Octal เป็นตัวแทนที่แท้จริง

ตัวเลขฐานแปดจะต้องเขียน 0o777, รูปแบบเดิมของ 0777 ไม่สามารถใช้; จะต้องเขียนใน 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

2.x หลามในเครื่องหมายคำพูดกลับ `` ฟังก์ชั่น Repr เทียบเท่ากับบทบาทของ

งูหลาม 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 เป็นนิติบุคคลที่จัดตั้งในขณะนี้เป็นโมดูล IO ใหม่ ใหม่ MD5 โมดูล gopherlib จะถูกลบออก งูหลาม 2.6 มีการสนับสนุนสำหรับโมดูล IO ใหม่

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer คุกกี้ cookielib จะรวมอยู่ในแพคเกจที่ http

ยกเลิกคำสั่ง exec เพียง exec () ฟังก์ชัน งูหลาม 2.6 มีการสนับสนุน exec () ฟังก์ชั่น


5. ประเภทข้อมูล

1) Py3.X ลบออกชนิดยาวในขณะนี้มีเพียงหนึ่ง --int จำนวนเต็ม แต่มันจะทำงานเหมือนรุ่น 2.X ของยาว

2) เพิ่มไบต์พิมพ์ที่สอดคล้องกับรุ่น 2.X ของชุดแปดกำหนดไบต์วิธีการที่แท้จริงจะเป็นดังนี้:

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

วัตถุ STR และไบต์วัตถุสามารถใช้ .encode () (STR -> bytes) หรือ .decode () (ไบต์ -> STR) วิธีการในแต่ละอื่น ๆ

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

3) Dict ของ .keys (). รายการและ .values ​​() วิธีการส่งกลับ iterator ขณะ iterkeys ก่อนหน้า () และฟังก์ชั่นอื่น ๆ จะถูกยกเลิก ในเวลาเดียวกันออกมี dict.has_key () แทนที่ด้วยในนั้น