1.การตั้งชื่อตัวแปร
ใน Python 2 ชื่อตัวแปรจะใช้ได้แค่อักษรโรมัน 26 ตัวหลัก (ทั้งพิมพ์ใหญ่และพิมพ์เล็ก) และตัวเลข 0 ถึง 9 แล้วก็สัญลักษณ์ขีดล่าง _ แต่ใน Python 3 สามารถตั้งชื่อเป็นอักษรชนิดอื่นได้ เช่น
- อักษรโรมันที่มีสัญลักษณ์เพิ่มเติม (áéíóúýäëïöüÿøåæñ ฯลฯ)
- อักษรกรีก (αβγδεζηθικλμνξοπρστυφχψω ฯลฯ)
- อักษรไทย ลาว เขมร เวียดนาม จีน ญี่ปุ่น เกาหลี ฯลฯ (ไทย ລາວ ខ្មែរ Việt 漢字 カタカナ ひらがな 한글 ฯลฯ)
ตัวอย่าง
โค้ด: เลือกทั้งหมด
นักศึกษามหาวิทยาลัยที่หนึ่งมีจำนวนนิสิต = 22,200
โค้ด: เลือกทั้งหมด
SyntaxError: invalid syntax
2.ชนิดข้อมูลจำนวนเต็ม
ใน Python 2 นั้นจำนวนเต็มถูกแบ่งเป็น 2 ชนิดคือ int กับ long แต่ใน Python 3 ได้รวมกันเป็นชนิดเดียวคือ int โดยค่า int จะมีขอบเขตจำกัดอยู่ค่าหนึ่ง ค่าสูงสุดของ int นั้นมีจำกัดอยู่แล้วแต่เครื่อง
ตัวอย่าง
โค้ด: เลือกทั้งหมด
import sys
print(sys.maxint)
โค้ด: เลือกทั้งหมด
1208925819614629174706176
โค้ด: เลือกทั้งหมด
1208925819614629174706176L
ดังนั้นหากพิมพ์ 1208925819614629174706176L ลงใน Python 3 ก็จะขึ้นว่า
โค้ด: เลือกทั้งหมด
SyntaxError: invalid syntax
ใน Python 2 นั้นหากจะแปลงสายอักขระที่เก็บตัวเลขให้เป็นข้อมูลชนิดจำนวนตัวเลขจะต้องใช้เลขฮินดูอารบิกเท่านั้น เช่น
โค้ด: เลือกทั้งหมด
int('20') # ได้ 20
โค้ด: เลือกทั้งหมด
int('๒๐') # ได้ 20
4.ฟังก์ชัน print
ใน Python 2 คำสั่ง print มีโครงสร้างการใช้แบบนี้
โค้ด: เลือกทั้งหมด
print 'Mindphp'
โค้ด: เลือกทั้งหมด
print ('Mindphp')
5.ฟังก์ชัน input
ใน Python 2 นั้นฟังก์ชัน input จะเป็นการใส่ข้อมูลที่เป็นตัวเลข แต่หากจะใส่สายอักขระต้องเป็น raw_input แต่ใน Python 3 ถูกแก้ให้ input เป็นการนำเข้าสายอักขระเท่านั้น และฟังก์ชัน raw_input ก็หายไป ไม่สามารถใช้ได้แล้ว
ยกตัวอย่าง เช่น
โค้ด: เลือกทั้งหมด
c = input()
โค้ด: เลือกทั้งหมด
NameError: name 'ข้อความ' is not defined
ใน Python 2 นั้นจำนวนเต็มหารจำนวนเต็มจะได้จำนวนเต็มเช่นเดิม และหากเหลือเศษจะมีการปัดเศษให้เป็นจำนวนเต็ม
แต่ใน Python 3 จำนวนเต็มหารจำนวนเต็มจะได้จำนวนจริง ซึ่งมีทศนิยมได้ ดังนั้นจะไม่มีการปัดเศษ
ยกตัวอย่าง
โค้ด: เลือกทั้งหมด
print(5/3)
โค้ด: เลือกทั้งหมด
1.6666666666666667
โค้ด: เลือกทั้งหมด
1
ใน Python 2 หากจำนวนติดลบยกกำลังก็จะขัดข้องทันที ในขณะที่ใน Python 3 จะเปลี่ยนเป็นข้อมูลชนิดจำนวนเชิงซ้อนให้เลย เช่น
โค้ด: เลือกทั้งหมด
(-2)**1.1
โค้ด: เลือกทั้งหมด
(-2.0386342710747223-0.6623924280875919j)
โค้ด: เลือกทั้งหมด
ValueError: negative number cannot be raised to a fractional power
ใน Python 3 ชนิดของตัวอักษรที่เก็บอยู่ภายในสายอักขระนั้นทั้งหมดถูกเก็บในรูปแบบของ ยูนิโค้ด (unicode) ซึ่งสามารถเก็บตัวอักษรทั้งหมดทุกชนิดได้ในลักษณะเดียวกัน แต่ใน Python 2 อักษรถูกเก็บในรูปของ ASCII ส่วนอักษรที่ไม่ใช่อักษร ASCII ถูกเก็บในรูปของรหัสยูนิโค้ด utf-8
เมื่อลองใช้ฟังก์ชัน len เพื่อหาความยาวของสายอักขระที่มีอักษรที่ไม่ใช่ ASCII เปรียบเทียบกันระหว่างใน Python 2 กับ 3
โค้ด: เลือกทั้งหมด
print(len('mindpกขคงจ'))
โค้ด: เลือกทั้งหมด
10
แต่ถ้าเป็นใน Python 2 จะได้เป็น
โค้ด: เลือกทั้งหมด
20
9.ชนิดข้อมูลของ range
หนึ่งในฟังก์ชันที่ถูกเปลี่ยนแปลงไปก็คือฟังก์ชัน range และมีฟังก์ชันหนึ่งที่หายไป นั่นก็คือ xrange ใน Python 2 นั้นมีฟังก์ชัน range กับ xrange ทั้ง 2 ฟังก์ชันแล้วคล้ายกันแต่มีความต่างกันเล็กน้อย
range เป็นฟังก์ชันสำหรับคืนค่าข้อมูลประเภทลิสต์ของจำนวนเต็มซึ่งมีค่าในช่วงตามที่กำหนดออกมา เช่น
โค้ด: เลือกทั้งหมด
print(range(10)) #จะได้ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
โค้ด: เลือกทั้งหมด
print(type(range(10)) #จะได้ <type 'list'>
โค้ด: เลือกทั้งหมด
print(xrange(10))#จะได้ xrange(10)
10.การจัดการกับตัวแปรที่ใช้ใน for
ใน Python 3 เมื่อใช้คำสั่ง for สำหรับสร้างลิสต์ ตัวแปรนั้นจะถูกแยกออกเป็นคนละโลกกับตัวแปรภายนอก กล่าวคือต่อให้ชื่อตัวแปรซ้ำกันก็จะไม่กระทบต่อตัวแปรนั้นที่อยู่นอกคำสั่ง สร้างลิสต์ เช่น
โค้ด: เลือกทั้งหมด
i=10
print('ค่า i ก่อน for:', i)
print('ค่า i ใน for:', [i for i in range(5)])
print('ค่า i หลัง for:', i)
โค้ด: เลือกทั้งหมด
ค่า i ก่อน for: 10
ค่า i ใน for: [0, 1, 2, 3, 4]
ค่า i หลัง for: 10
11.เมธอด keys, values และ items ของดิกชันนารี
ใน Python 2 เมธอด keys, values และ items จะคืนค่าลิสต์ของคีย์, ค่า และ ทูเพิลของคีย์และค่า ตามลำดับ เช่น
โค้ด: เลือกทั้งหมด
dic = {'a': 1, 'b': 2, 'c': 3}
print(dic.keys())
print(dic.values())
print(dic.items())
โค้ด: เลือกทั้งหมด
['a', 'b', 'c']
[1, 2, 3]
[('a', 1), ('b', 2), ('c', 3)]
โค้ด: เลือกทั้งหมด
dict_keys(['c', 'b', 'a'])
dict_values([3, 2, 1])
dict_items([('c', 3), ('b', 2), ('a', 1)])
Python 2 นั้น ฟังก์ชัน map เมื่อใช้แล้วจะคืนค่าออกมาเป็นลิสต์ ไม่ว่าจะใส่ลิสต์หรือทูเพิลหรือเซ็ต
โค้ด: เลือกทั้งหมด
map(float,(1,2,3)) # ได้ [1.0, 2.0, 3.0]
โค้ด: เลือกทั้งหมด
map(float,(1,2,3)) # ได้ <map at 0x112383710>
list(map(float,(1,2,3))) # ได้ [1.0, 2.0, 3.0]
โค้ด: เลือกทั้งหมด
filter(lambda x:x%2,[1,2,3]) # ได้ [1, 3]
filter(lambda x:x%2==0,(1,2,3)) # ได้ (2,)
filter(lambda x:x<3,{1,2,3}) # ได้ [1, 2]
โค้ด: เลือกทั้งหมด
filter(lambda x:x<3,{1,2,3}) # ได้ <filter at 0x112383eb8>
set(filter(lambda x:x<3,{1,2,3})) # ได้ {1, 2}
โค้ด: เลือกทั้งหมด
zip({1,2},{3,4}) # ได้ [(1, 3), (2, 4)]
zip([1,2,3],[4,5,6]) # ได้ [(1, 4), (2, 5), (3, 6)]
โค้ด: เลือกทั้งหมด
zip({1,2},{3,4}) # ได้ <zip at 0x11239e188>
list(zip([1,2,3],[4,5,6])) # ได้ [(1, 4), (2, 5), (3, 6)]
ใน Python 2 เวลาที่จะประกาศเรียกใช้ฟังก์ชัน super จากในซับคลาสเพื่อเรียกซูเปอร์คลาสจะมีกฏ
โค้ด: เลือกทั้งหมด
class test(object):
def __init__(self,x):
self.x = x
class test(stest):
def __init__(self,x,y):
super(test,self).__init__(x)
self.y = y
c = test(5,10)
แต่ใน Python 3 สามารถละได้ทั้งหมด จึงเขียนแค่นี้ได้
โค้ด: เลือกทั้งหมด
class stest:
def __init__(self,x):
self.x = x
class test(stest):
def __init__(self,x,y):
super().__init__(x)
self.y = y
c = test(5,10)
14.ออบเจ็กต์ของความผิดพลาดในโครงสร้าง try except
ใน Python 2 เวลาที่ใช้ except หากต้องการให้มีตัวแปรมารับออบเจ็กต์ของความผิดพลาดเพื่อนำไปแสดงผลหรือทำอะไรจะใช้จุลภาค , เขียนต่อจากชนิดของข้อผิดพลาดไปเลย
โค้ด: เลือกทั้งหมด
import math
try:
1/0
except Exception, er:
print(type(er))
print(er)
# จะได้ <type 'exceptions.ZeroDivisionError'> integer division or modulo by zero
โค้ด: เลือกทั้งหมด
import math
try:
1/0
except Exception as er:
print(type(er))
print(er)
# จะได้ ]<class 'ZeroDivisionError'> division by zero
นิยามคลาสของอิเทอเรเตอร์นั้นภายในโครงสร้างจะต้องนิยามเมธอดที่จะให้ทำงานเมื่อเจอฟังก์ชัน next ซึ่งเมธอดนั้นใน Python 2 มีชื่อว่า next
โค้ด: เลือกทั้งหมด
class test:
def __init__(self):
self.n = 0
def __iter__(self):
return self
def next(self):
self.n += 1
return self.n
โค้ด: เลือกทั้งหมด
class test:
def __init__(self):
self.n = 0
def __iter__(self):
return self
def __next__(self):
self.n += 1
return self.n
16.มอดูล __future__
Python 2 สามารถนำคำสั่งบางอย่างจาก Python 3 มาใช้ได้โดยการนำเข้ามอดูล __future__ เช่น
โค้ด: เลือกทั้งหมด
from __future__ import print_function
print 5
# จะได้ SyntaxError: invalid syntax
โค้ด: เลือกทั้งหมด
print(5,5,5,5)
# จะได้ 5 5 5 5
-บทเรียน Python
-บทเรียน Python Framework Flask
-ความหมายของคำ คืออะไร
-VDO Tutorial - Python
-ถาม-ตอบ Java & Python