Python 3.10 — 5คุณสมบัติใหม่และข้อควรพิจารณา

Python 3.10 — 5คุณสมบัติใหม่และข้อควรพิจารณา

ไม่กี่วันที่ผ่านมา Python 3.10 ได้เปิดตัวในที่สุด มีบทความออนไลน์มากมายที่เผยแพร่ก่อนเผยแพร่ด้วยซ้ำ อย่างไรก็ตาม ฉันพบว่าส่วนใหญ่เป็นเพียงรายการคุณสมบัติใหม่โดยไม่ต้องพูดคุยกันมากเกินไป ดังนั้น ในบทความของฉัน ฉันจะพยายามยกตัวอย่างเกี่ยวกับวิธีใช้คุณลักษณะใหม่เหล่านี้ นอกจากนี้ ฉันจะหารือเกี่ยวกับพวกเขาด้วยความคิดเห็นส่วนตัวของฉัน

ฉันจะไม่แสดงรายการการเปลี่ยนแปลงเหล่านี้อีก หากคุณต้องการรายการคุณสมบัติใหม่ทั้งหมด เอกสารประกอบอย่างเป็นทางการคือที่ที่ดีที่สุดเสมอ

มุ่งเน้นไปที่คุณสมบัติของฉันยังจะแนะนำวิธีการที่จะได้รับนี้รุ่นใหม่ของงูใหญ่เพื่อให้เราทุกคนสามารถเริ่มต้นการเล่นรอบ เนื่องจากมันเปิดตัวแล้ว ฉันจึงสามารถใช้ชุดเครื่องมือการจัดการสภาพแวดล้อม Python ที่ฉันโปรดปราน

หลังการติดตั้ง เราสามารถสร้างสภาพแวดล้อมเสมือน Python ใหม่ด้วยเวอร์ชันใหม่ล่าสุด — 3.10

สร้าง conda --name py310 python=3.10

1. อนุญาตให้เขียนประเภทสหภาพเป็น X | Y

คุณลักษณะสำคัญประการแรกคือไวยากรณ์ประเภทยูเนี่ยน โดยเฉพาะอย่างยิ่ง เราสามารถใช้ไพพ์ระหว่างสองประเภทขึ้นไปเพื่อแสดงถึง “ประเภทนี้หรือประเภทนั้น”

การใช้ไวยากรณ์นี้โดยทั่วไปคือการตรวจสอบประเภทของวัตถุ แทนที่จะเขียนเงื่อนไขหลายๆ อย่าง เช่นisinstance(x, int) or isinstance(x, str)ตอนนี้ เราสามารถเขียนโค้ดได้ดังนี้

isinstance(x, int | str)

ดูตัวอย่างด้านล่าง

 

สิ่งแรกที่อยู่ในความคิดของฉันคือเราสามารถใช้ไวยากรณ์นี้เพื่อเขียนเงื่อนไขที่แข็งแกร่งบางอย่างได้ ตัวอย่างเช่น ตัวแปรควรเป็นจำนวนเต็ม แต่ก็อาจเป็น “ไม่มี” ซึ่งก็ใช้ได้เช่นกัน จากนั้นเราสามารถเขียนเงื่อนไขแบบนี้ได้

isinstance(x, int | None)

นอกจากนั้นยังมีฟังก์ชั่นลายเซ็น ตอนนี้ เราสามารถใช้ไวยากรณ์นี้เพื่อระบุว่าพารามิเตอร์สามารถมีได้หลายประเภท ตัวอย่างเช่น เราต้องการเขียนฟังก์ชันดังกล่าวเพื่อเพิ่ม 1 ไปยังอาร์กิวเมนต์ที่ส่งผ่านเข้าไป อาร์กิวเมนต์อาจเป็นจำนวนเต็มหรือสตริง และค่าที่ส่งคืนควรเป็นค่าเดียวกับประเภทดั้งเดิม

def plus_1(number: int | str): 
    if isinstance(number, int): 
        return number + 1 
    else: 
        number = int(number) 
        return str(number + 1)

เราสามารถตรวจสอบได้ว่าทำงานตามที่คาดไว้หรือไม่

 

2. เพิ่มตัวเลือกการตรวจสอบความยาวเป็น zip()

zip()ฟังก์ชั่นได้รับการกล่าวถึงอย่างลึกซึ้งในหนึ่งในบทความก่อนหน้านี้ของฉัน คุณสมบัติใหม่นี้ใน Python 3.10 ถูกกล่าวถึงที่นี่เช่นกัน เป็นฟังก์ชันที่ทรงพลังและมีประโยชน์มากใน Python ขอแนะนำให้อ่านบทความของฉันหากคุณไม่ทราบ

โดยสังเขปzip()ฟังก์ชันจะรับไอเท็มจากคอนเทนเนอร์สองคอนเทนเนอร์ (เช่น รายการ) ทีละรายการ และนำไอเท็มไปที่ตำแหน่งที่สอดคล้องกันที่คอนเทนเนอร์ทั้งสองรวมกันในทูเพิล ดูตัวอย่างด้านล่าง

list ( 
    zip([1, 2, 3], ['a', 'b', 'c']) 
)

โดยค่าเริ่มต้น หากเราระบุสองรายการที่มีความยาวต่างกัน รายการพิเศษในรายการที่ยาวกว่าจะถูกละเว้น สิ่งนี้เรียกอีกอย่างว่า “Bucket Effects”

ในตัวอย่างข้างต้น รายการ'd'ในรายการที่สองจะถูกละเว้น

อย่างไรก็ตาม บางครั้งเราอาจไม่ทราบว่ามีบางรายการที่ถูกละเลย เนื่องจากฟังก์ชันจะทำอย่างนั้นอย่างเงียบๆ ดังนั้นใน Python 3.10 จึงมีการแนะนำแฟล็กใหม่ที่เรียกว่า “strict” เพื่อบังคับให้รายการทั้งสองมีความยาวเท่ากัน

3. อนุญาตให้ใช้ตัวจัดการบริบทในวงเล็บอย่างเป็นทางการแล้ว

ในเวอร์ชันก่อนๆ การมีอนุประโยคหลายประโยคในคำสั่ง “with” เดียวนั้นค่อนข้างเจ็บปวด ตัวอย่างเช่น หากเราต้องการเปิดไฟล์สองไฟล์ในคำสั่ง “with” เดียว เราต้องเขียนไฟล์เหล่านั้นในบรรทัดเดียว

สิ่งนี้จะเจ็บปวดอย่างยิ่งเมื่อเรามีข้อโต้แย้งที่ยาวนานมากในopen()ฟังก์ชัน

มีวิธีแก้ไขในการทำให้โค้ดของเราดีขึ้น ซึ่งก็คือการเพิ่มเครื่องหมายทับย้อนกลับ เพื่อให้เราสามารถแบ่งมันออกเป็นหลายบรรทัดได้

โดยส่วนตัวผมอยากเขียนโค้ดดังนี้ครับ ซึ่งผมคิดว่าน่าจะอ่านง่ายกว่า โดยเฉพาะเมื่อเรามีมากกว่าสองรายการ

4. syntaxตัวใหม่: match … case …

ค่อนข้างขัดแย้งที่จะมีไวยากรณ์ “switch … case …” ใน Python Guido บิดาของ Python ก็ไม่สนับสนุนการเพิ่มไวยากรณ์ดังกล่าวใน Python อย่างไรก็ตาม มันยังคงวางจำหน่ายในเวอร์ชันใหม่นี้ และฉันเชื่อมั่นจริงๆ ว่าไวยากรณ์นี้ดี

โปรดสังเกตว่าผู้คนมักพูดว่า “switch case” เพราะมักใช้ในภาษาการเขียนโปรแกรมอื่นๆ อย่างไรก็ตาม ใน Python คีย์เวิร์ดคือ “match … case …”

ตัวอย่างเช่น เราสามารถส่งคืนข้อความต่างๆ ตามรหัส HTTP

ในตัวอย่างนี้ นักพัฒนาแบบอนุรักษ์นิยมอาจยังคงโต้แย้งว่าจริง ๆ แล้วไม่ได้ให้ประโยชน์ใดๆ ในการปรับปรุงโค้ดจากความสามารถในการอ่าน เราสามารถเขียนฟังก์ชันนี้ใหม่โดยใช้ if-else และมันก็ไม่ได้แย่เกินไป

def http_error(status):
      if status == 400:
                 return “Bad request”
     elif status == 401:
                return “Unauthorized”
elif status == 403:
                return “Forbidden”
elif status == 404:
                 return “Not found”
else:
               return “Unknown status code”

อันที่จริง สำหรับกรณีการใช้งานทั่วไป ไวยากรณ์ของตัวพิมพ์ตรงกันไม่ได้สร้างความแตกต่างมากนัก อย่างไรก็ตาม ในความเห็นของฉัน คำหลักใหม่ “การจับคู่” ระบุตรรกะหลักและวัตถุประสงค์ของไวยากรณ์นี้ มีจุดมุ่งหมายเพื่อทำให้ชีวิตของเราง่ายขึ้นเมื่อเราต้องการ “จับคู่” รูปแบบบางอย่างสำหรับการแสดงออก

ตัวอย่างเช่น เราต้องการเขียนฟังก์ชันเพื่อส่งคืน URL โฮสต์ หมายเลขพอร์ต และประเภทโปรโตคอลจากทูเปิล อย่างไรก็ตาม ทูเพิลสามารถมีได้สองรายการ (โฮสต์และพอร์ต) เท่านั้น ในกรณีนั้น เราต้องการส่งคืนโปรโตคอลเริ่มต้น “https” หากทูเพิลได้จัดเตรียมโปรโตคอลไว้แล้ว เราจะต้องส่งคืนโปรโตคอลดังกล่าว

จริงๆ มันก็ไม่ได้แย่เกินไปด้วยซ้ำ อย่างไรก็ตาม หากเราคิดถึงสองรูปแบบที่เราพยายามจะจับคู่ เราสามารถเขียนโค้ดใหม่ได้ดังนี้โดยใช้รูปแบบใหม่

5. ปรับปรุงข้อความแสดงข้อผิดพลาด

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

ข้อความแสดงข้อผิดพลาดจะบอกเราว่าไม่ประสบความสำเร็จเมื่อแยกวิเคราะห์รหัส

ในเวอร์ชันใหม่ ข้อความแสดงข้อผิดพลาดเหล่านี้ได้รับการปรับปรุงให้ดีขึ้นอย่างมาก มันจะบอกเราโดยตรงว่าเหตุใดจึงไม่สามารถแยกวิเคราะห์ได้

สรุป

ในบทความนี้ ฉันได้แนะนำ 5 คุณสมบัติใหม่ที่สำคัญที่สุดใน Python 3.10 ซึ่งเปิดตัวเมื่อไม่กี่วันก่อน หวังว่ามันจะเป็นประโยชน์และแสดงให้เห็นคุณสมบัติใหม่เหล่านี้อย่างดีด้วยตัวอย่างที่ฉันได้ให้ไว้

Credit : Medium.com

Leave a Comment

Your email address will not be published.