การเปิดตัวภาษาการเขียนโปรแกรม Python 3.8

หลังจากหนึ่งปีครึ่งของการพัฒนา นำเสนอ การเปิดตัวภาษาโปรแกรมหลัก งูหลาม 3.8. การปรับปรุงแก้ไขสำหรับสาขา Python 3.8 มีการวางแผน ปล่อยตัวภายใน 18 เดือน ช่องโหว่ที่สำคัญจะได้รับการแก้ไขเป็นเวลา 5 ปีจนถึงเดือนตุลาคม 2024 การอัปเดตการแก้ไขสำหรับสาขา 3.8 จะออกทุกๆ สองเดือน โดยมีการเปิดตัว Python 3.8.1 เวอร์ชันแก้ไขครั้งแรกในเดือนธันวาคม

ในบรรดาสิ่งที่เพิ่มเข้ามา นวัตกรรม:

  • สนับสนุน การดำเนินการมอบหมายภายในนิพจน์ที่ซับซ้อน ด้วยตัวดำเนินการ “:=” ใหม่ คุณสามารถดำเนินการกำหนดค่าภายในนิพจน์อื่นๆ ได้ ตัวอย่างเช่น เพื่อหลีกเลี่ยงการเรียกใช้ฟังก์ชันคู่ในคำสั่งแบบมีเงื่อนไขและเมื่อกำหนดการวนซ้ำ:

    ถ้า (n := len(a)) > 10:
    ...

    ในขณะที่ (บล็อก := f.read(256)) != ":
    ...

  • สนับสนุน ไวยากรณ์ใหม่สำหรับการระบุอาร์กิวเมนต์ของฟังก์ชัน เมื่อแจกแจงอาร์กิวเมนต์ระหว่างการกำหนดฟังก์ชัน ตอนนี้คุณสามารถระบุ "/" เพื่อแยกอาร์กิวเมนต์ที่สามารถกำหนดค่าได้ตามลำดับที่มีการแจกแจงค่าระหว่างการเรียกใช้ฟังก์ชันจากอาร์กิวเมนต์ที่สามารถกำหนดได้เท่านั้น ในลำดับใดๆ (ตัวแปร=ไวยากรณ์ค่า) ) ในทางปฏิบัติ คุณสมบัติใหม่ช่วยให้ฟังก์ชันใน Python จำลองพฤติกรรมของฟังก์ชันที่มีอยู่ใน C ได้อย่างสมบูรณ์ และยังหลีกเลี่ยงการเชื่อมโยงกับชื่อเฉพาะ เช่น หากมีการวางแผนว่าจะเปลี่ยนชื่อพารามิเตอร์ในอนาคต

    แฟล็ก "/" เป็นส่วนเสริมแฟล็ก "*" ที่เพิ่มไว้ก่อนหน้านี้ โดยแยกตัวแปรที่ใช้เฉพาะการกำหนดในรูปแบบ "variable=value" เท่านั้น ตัวอย่างเช่นในฟังก์ชัน "def f(a, b, /, c, d, *, e, f):" สามารถกำหนดตัวแปร "a" และ "b" ตามลำดับค่าที่แสดงเท่านั้น ,
    ตัวแปร “e” และ “f” ผ่านการกำหนด “ตัวแปร=ค่า” เท่านั้น และตัวแปร “c” และ “d” ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:

    ฉ(10, 20, 30, 40, อี=50, f=60)
    ฉ(10, 20, s=30, d=40, อี=50, f=60)

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

  • ดำเนินการแล้ว โปรโตคอล Vectorcall ใหม่เพื่อการเข้าถึงวัตถุที่เขียนด้วยภาษา C ได้เร็วขึ้น ใน CPython 3.8 การเข้าถึง Vectorcall ยังคงจำกัดเฉพาะการใช้งานภายใน มีการวางแผนการถ่ายโอนไปยังหมวดหมู่ของ API ที่เข้าถึงได้แบบสาธารณะใน CPython 3.9
  • เพิ่ม เรียกใช้ Runtime Audit Hooks ซึ่งให้แอปพลิเคชันและเฟรมเวิร์กใน Python เข้าถึงข้อมูลระดับต่ำเกี่ยวกับความคืบหน้าของสคริปต์เพื่อตรวจสอบการดำเนินการที่ทำ (เช่น คุณสามารถติดตามการนำเข้าโมดูล การเปิดไฟล์ การใช้การติดตาม การเข้าถึงซ็อกเก็ตเครือข่าย การรันโค้ดผ่าน exec, eval และ run_mod)
  • ในโมดูล ดอง ที่ให้ไว้ รองรับโปรโตคอล Pickle 5 ซึ่งใช้สำหรับซีเรียลไลซ์และดีซีเรียลไลซ์อ็อบเจ็กต์ Pickle ช่วยให้คุณสามารถเพิ่มประสิทธิภาพการถ่ายโอนข้อมูลจำนวนมากระหว่างกระบวนการ Python ในการกำหนดค่าแบบมัลติคอร์และหลายโหนด โดยการลดจำนวนการดำเนินการคัดลอกหน่วยความจำ และใช้เทคนิคการปรับให้เหมาะสมเพิ่มเติม เช่น การใช้อัลกอริธึมการบีบอัดเฉพาะข้อมูล โปรโตคอลเวอร์ชันที่ XNUMX มีความโดดเด่นในเรื่องการเพิ่มโหมดการส่งข้อมูลแบบนอกย่านความถี่ ซึ่งสามารถส่งข้อมูลแยกจากสตรีมดองหลักได้
  • ตามค่าเริ่มต้น เวอร์ชันที่สี่ของโปรโตคอล Pickle จะถูกเปิดใช้งาน ซึ่งเมื่อเปรียบเทียบกับเวอร์ชันที่สามที่เสนอไว้ก่อนหน้านี้ตามค่าเริ่มต้น ช่วยให้มีประสิทธิภาพที่สูงขึ้นและลดขนาดของข้อมูลที่ส่ง
  • ในโมดูล การพิมพ์ มีการนำเสนอคุณสมบัติใหม่หลายประการ:
    • ชั้นเรียน พิมพ์Dict สำหรับอาร์เรย์แบบเชื่อมโยงซึ่งมีการระบุข้อมูลประเภทอย่างชัดเจนสำหรับข้อมูลที่เกี่ยวข้องกับคีย์ (“TypedDict('Point2D', x=int, y=int, label=str)”)
    • ชนิด ตามตัวอักษรซึ่งช่วยให้คุณสามารถจำกัดพารามิเตอร์หรือคืนค่าเป็นค่าที่กำหนดไว้ล่วงหน้าบางค่า ​​(“Literal['connected', 'disconnected']”)
    • ออกแบบ "สุดท้าย" ซึ่งทำให้สามารถกำหนดค่าของตัวแปร ฟังก์ชัน วิธีการ และคลาสที่ไม่สามารถเปลี่ยนแปลงหรือกำหนดใหม่ได้ ("pi: Final[float] = 3.1415926536")
  • เพิ่มความสามารถในการกำหนดแคชสำหรับไฟล์ที่คอมไพล์ด้วย bytecode บันทึกในแผนผัง FS แยกต่างหาก และแยกออกจากไดเร็กทอรีด้วยโค้ด เส้นทางสำหรับการบันทึกไฟล์ด้วย bytecode ถูกตั้งค่าผ่านตัวแปร PYTHONPYCACHEPREFIX หรือตัวเลือก "-X pycache_prefix";
  • ดำเนินการแล้ว ความสามารถในการสร้างบิลด์การดีบักของ Python ที่ใช้ ABI ที่เหมือนกับรีลีส ซึ่งช่วยให้คุณโหลดส่วนขยายที่เขียนด้วยภาษา SI ซึ่งคอมไพล์สำหรับรีลีสที่เสถียรในบิลด์การดีบัก
  • f-strings (ตัวอักษรที่จัดรูปแบบนำหน้าด้วย 'f') ให้การสนับสนุนตัวดำเนินการ = (เช่น "f'{expr=}'") ซึ่งช่วยให้คุณสามารถแปลงนิพจน์เป็นข้อความเพื่อให้แก้ไขจุดบกพร่องได้ง่ายขึ้น ตัวอย่างเช่น:

    ››› ผู้ใช้ = 'eric_idle'
    ››› member_since = วันที่ (1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • การแสดงออก "ต่อ» อนุญาตให้ใช้ภายในบล็อกได้ ในที่สุด;
  • เพิ่มโมดูลใหม่แล้ว มัลติโพรเซสซิง.shared_memoryช่วยให้สามารถใช้เซ็กเมนต์หน่วยความจำที่ใช้ร่วมกันในการกำหนดค่าหลายกระบวนการ
  • บนแพลตฟอร์ม Windows การใช้งาน asyncio ได้ถูกย้ายไปใช้คลาส ProactorEventLoop;
  • ประสิทธิภาพของคำสั่ง LOAD_GLOBAL เพิ่มขึ้นประมาณ 40% เนื่องจากการใช้กลไกการแคชโค้ดออบเจ็กต์ใหม่

ที่มา: opennet.ru

เพิ่มความคิดเห็น