หลังจากหนึ่งปีครึ่งของการพัฒนา
ในบรรดาสิ่งที่เพิ่มเข้ามา
-
สนับสนุน การดำเนินการมอบหมายภายในนิพจน์ที่ซับซ้อน ด้วยตัวดำเนินการ “:=” ใหม่ คุณสามารถดำเนินการกำหนดค่าภายในนิพจน์อื่นๆ ได้ ตัวอย่างเช่น เพื่อหลีกเลี่ยงการเรียกใช้ฟังก์ชันคู่ในคำสั่งแบบมีเงื่อนไขและเมื่อกำหนดการวนซ้ำ:ถ้า (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