Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ความแตกต่างระหว่าง Python 2.x และ Python 3.x?


มีการถกเถียงกันอยู่เสมอในชุมชนการเขียนโค้ดว่าเวอร์ชัน python ใดดีที่สุดในการเรียนรู้:Python 2.x หรือ Python 3.x

ด้านล่างนี้คือข้อแตกต่างที่สำคัญระหว่าง pyton 2.x และ python 3.x

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

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

#Python 2.7print 'Python', python_version()print 'Hello, World!'print('Hello, World!')พิมพ์ "ข้อความ",; พิมพ์ 'ข้อความเพิ่มเติมที่นี่'

ผลลัพธ์

Python 2.7.6สวัสดี World!สวัสดี World!text พิมพ์ข้อความเพิ่มเติมที่นี่Python 3import sysprint("เวอร์ชัน Python คือ %s.%s.%s" %sys.version_info[:3])print('สวัสดี World!')print("some text", end="")print('some more text here')

ผลลัพธ์

เวอร์ชัน Python คือ 3.6.1สวัสดี ชาวโลก!บางข้อความ ข้อความเพิ่มเติมที่นี่>>>> พิมพ์ "สวัสดี" ข้อผิดพลาดทางไวยากรณ์:ไม่มีวงเล็บในการเรียกใช้ 'พิมพ์'

2. การหารจำนวนเต็ม

Python 2 ถือว่าตัวเลขที่คุณพิมพ์โดยไม่มีตัวเลขหลังจุดทศนิยมเป็นจำนวนเต็ม ซึ่งอาจนำไปสู่ผลลัพธ์ที่ไม่คาดคิดในระหว่างการหาร ตัวอย่างเช่น หากคุณพิมพ์นิพจน์ 3 / 2 ในโค้ด Python 2 ผลลัพธ์ของการประเมินจะเป็น 1 ไม่ใช่ 1.5 อย่างที่คุณคาดไว้ ขอแนะนำให้ใช้ float(x) แทนการใช้เพียง x ในโค้ด python 3 ของคุณ (ในกรณีที่พอร์ต codebase เป็น python 2) หรือใช้จาก __future__ แผนกนำเข้าในสคริปต์ python 2 ของคุณ

#Python 2

พิมพ์ 'Python', python_version()print '3 / 2 =', 3 / 2print '3 // 2 =', 3 // 2print '3 / 2.0 =', 3 / 2.0print '3 // 2.0 =', 3 // 2.0

ผลลัพธ์

Python 2.7.63 / 2 =13 // 2 =13 / 2.0 =1.53 // 2.0 =1.0

#Python 3.6.1

import sysprint('Python %s.%s.%s' %sys.version_info[:3])print('3 / 2 =', 3 / 2)print('3 // 2 =', 3 // 2)print('3 / 2.0 =', 3 / 2.0)print('3 // 2.0 =', 3 // 2.0)

ผลลัพธ์

Python 3.6.13 / 2 =1.53 // 2 =13 / 2.0 =1.53 // 2.0 =1.0

3. สตริง Unicode

ตามค่าเริ่มต้น Python 3 จะจัดเก็บสตริงเป็น Unicode ในขณะที่ Python 2 ต้องการให้คุณทำเครื่องหมายสตริงด้วย "u" หากคุณต้องการจัดเก็บเป็น Unicode สตริง Unicode ใช้งานได้หลากหลายกว่าสตริง ASCII ซึ่งเป็นค่าเริ่มต้นของ Python 2 เนื่องจากสามารถเก็บจดหมายจากภาษาต่างประเทศ รวมทั้งอีโมจิ ตลอดจนตัวอักษรและตัวเลขโรมันมาตรฐาน

#Python 2

>>> ประเภทการพิมพ์(unicode('นี้เหมือนกับประเภท python3 str'))>>> ประเภทการพิมพ์ (ไม่มีประเภท b'byte')>>> พิมพ์ 'จริงๆ' + b' เหมือนกัน' เหมือนกันจริงๆ

#Python 3

import sysprint('Python %s.%s.%s' %sys.version_info[:3])print('strings are now utf-8 \u03BCnico\u0394é!')print('Python %s.% s.%s' %sys.version_info[:3], end="")print(' has', type(b' bytes for storage data'))print('Python %s.%s.%s' % sys.version_info[:3], end="")print(' also has', type(bytearray(b'bytearrays')))

ผลลัพธ์

Python 3.6.1 สตริงเป็น utf-8 μnicoΔé!Python 3.6.1 มี Python 3.6.1 มี 

“string” + b”bytes of data” จะเกิดข้อผิดพลาด

>>>> print ('จริงๆ แล้ว' + b' เหมือนกัน')Traceback (การโทรล่าสุดครั้งล่าสุด):ไฟล์ "" บรรทัดที่ 1 ใน print ('จริงๆ แล้ว ' + b' เหมือนกัน') TypeError:ต้องเป็น str ไม่ใช่ไบต์

4. เพิ่มข้อยกเว้น

Python 3 ต้องการไวยากรณ์ที่แตกต่างกันสำหรับการเพิ่มข้อยกเว้น หากคุณต้องการส่งข้อความแสดงข้อผิดพลาดไปยังผู้ใช้ คุณต้องใช้ไวยากรณ์ -

เพิ่ม IOError (“ข้อความแสดงข้อผิดพลาดของคุณ”)

ไวยากรณ์ด้านบนใช้ได้กับ python 2 และ python 3 ทั้งคู่

อย่างไรก็ตาม รหัสต่อไปนี้ใช้งานได้เฉพาะใน python 2 ไม่ใช่ python 3

เพิ่ม IOError “ข้อความแสดงข้อผิดพลาดของคุณ”

5. แสดงรายการตัวแปรลูปความเข้าใจ

ใน python 2 การกำหนดตัวแปรที่วนซ้ำใน "for loop" เป็นชื่อเดียวกับตัวแปรส่วนกลางอาจทำให้ค่าของตัวแปรส่วนกลางเปลี่ยนแปลงไป ซึ่งโดยทั่วไปแล้วเราไม่ต้องการ ปัญหานี้ได้รับการแก้ไขแล้วใน Python 3 ดังนั้นคุณสามารถใช้ชื่อตัวแปรที่คุณใช้สำหรับตัวแปรควบคุมใน "for loop" ของคุณแล้วโดยไม่ต้องกังวลว่ามันจะรั่วไหลออกมาและไปยุ่งกับค่าของตัวแปรในโค้ดที่เหลือของคุณ

#Python 2print 'Python', python_version()i =1print 'before:i =', iprint 'comprehension:', [i for i in range(5)]print 'after:i =', i 

ผลลัพธ์

Python 2.7.6before:i =1comprehension:[0, 1, 2, 3, 4]หลัง:i =4

#Python 3

import sysprint('Python %s.%s.%s' %sys.version_info[:3])i =1print('before:i =', i)print('comprehension:', [i for i) in range(5)])print('หลัง:i =', i)

ผลลัพธ์

Python 3.6.1before:i =1comprehension:[0, 1, 2, 3, 4]หลัง:i =1