หลังจากหนึ่งปีของการพัฒนา
การทำงานในสาขาใหม่จะเริ่มขึ้นห้าเดือนก่อนการเปิดตัวสาขาถัดไป เช่น ตรงกับการเปิดตัว Python 3.9
- ในพจนานุกรมที่กำหนดโดยใช้คลาส dict ในตัว
ปรากฏ รองรับตัวดำเนินการผสาน '|' และการอัปเดต "|=" ซึ่งเสริมวิธีการ {**d1, **d2} และ dict.update ที่เสนอไว้ก่อนหน้านี้สำหรับการรวมพจนานุกรม>>> x = {"key1": "value1 จาก x", "key2": "value2 จาก x"}
>>> y = {"key2": "value2 จาก y", "key3": "value3 จาก y"}>>> x | ย
{'key1': 'value1 จาก x', 'key2': 'value2 จาก y', 'key3': 'value3 จาก y'}>>> ย | x
{'key2': 'value2 จาก x', 'key3': 'value3 จาก y', 'key1': 'value1 จาก x'} - คอลเลกชันประเภทที่มีอยู่แล้วภายในประกอบด้วยรายการ dict และ tuple ซึ่งสามารถใช้เป็นประเภทพื้นฐานโดยไม่ต้องนำเข้าจากโมดูลการพิมพ์ เหล่านั้น. แทนที่จะพิมพ์.รายการ, พิมพ์.Dict และพิมพ์.Tuple ตอนนี้คุณสามารถระบุได้
เพียงรายการ dict และ tuple:def wait_all (ชื่อ: รายการ [str]) -> ไม่มี:
สำหรับชื่อในชื่อ:
พิมพ์ ("สวัสดี" ชื่อ) -
ถูกจัดหา เครื่องมือที่ยืดหยุ่นสำหรับใส่คำอธิบายประกอบฟังก์ชันและตัวแปร สำหรับการแนบคำอธิบายประกอบ จะมีการเพิ่มประเภทคำอธิบายประกอบใหม่ลงในโมดูลการพิมพ์ ซึ่งขยายประเภทที่มีอยู่ด้วยข้อมูลเมตาเพิ่มเติมที่สามารถใช้สำหรับการวิเคราะห์แบบคงที่หรือสำหรับการเพิ่มประสิทธิภาพรันไทม์ หากต้องการเข้าถึงข้อมูลเมตาจากโค้ด พารามิเตอร์ include_extras ได้ถูกเพิ่มลงในเมธอดการพิมพ์ get_type_hints()charType = คำอธิบายประกอบ [int, ctype ("char")] UnsignedShort = คำอธิบายประกอบ [int, struct2.ctype ('H')]
-
ลดสีลง ข้อกำหนดทางไวยากรณ์สำหรับนักตกแต่ง - สำนวนใดๆ ที่เหมาะสมสำหรับใช้ในบล็อก if และ while ตอนนี้สามารถใช้เป็นมัณฑนากรได้ การเปลี่ยนแปลงนี้ปรับปรุงความสามารถในการอ่านโค้ด PyQt5 ได้อย่างมาก และทำให้การบำรุงรักษาโมดูลนี้ง่ายขึ้น:มันเป็น:
button_0 = ปุ่ม[0] @button_0.clicked.connectตอนนี้คุณสามารถเขียน:
@buttons[0].คลิก.เชื่อมต่อ - ไปยังห้องสมุดมาตรฐาน
เพิ่ม โมดูลโซนอินโฟ ซึ่งรวมถึงข้อมูลจากฐานข้อมูลโซนเวลา IANA>>> จากการนำเข้า Zoneinfo ZoneInfo
>>> จาก datetime นำเข้า datetime, timedelta
>>> #ช่วงฤดูร้อน
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("อเมริกา/ลอส_แองเจลิส"))
>>> พิมพ์(dt)
2020-10-31 12:00:00-07:00>>> dt.tzname()
'พีดีที'>>> #เวลามาตรฐาน
>>> dt += เดลต้าเวลา(วัน=7)
>>> พิมพ์(dt)
2020-11-07 12:00:00-08:00>>> พิมพ์(dt.tzname())
PST - เพิ่มโมดูล Graphlib ซึ่งในนั้น
นำไปใช้ รองรับการเรียงลำดับโทโพโลยีของกราฟ -
เสนอ วิธีการใหม่ในการลบคำนำหน้าและการลงท้ายบรรทัด - str.removeprefix(คำนำหน้า) และ str.removesuffix(คำต่อท้าย) มีการเพิ่มวิธีการให้กับวัตถุ str, bytes, bytearray และ collections.UserString>>> s = "ฟูบาร์"
>>> s.removeprefix("ฟู")
'บาร์' -
ที่เกี่ยวข้อง ตัวแยกวิเคราะห์ใหม่PEG (Parsing Expression Grammar) ซึ่งเข้ามาแทนที่พาร์เซอร์LL(1) . การใช้ parser ใหม่ทำให้สามารถกำจัด “แฮ็ก” บางส่วนที่ใช้เพื่อหลีกเลี่ยงข้อจำกัดใน LL(1) ได้ และลดต้นทุนค่าแรงในการบำรุงรักษา parser ลงอย่างมาก ในแง่ของประสิทธิภาพ parser ใหม่นั้นอยู่ในระดับเดียวกับรุ่นก่อนหน้าโดยประมาณ แต่เหนือกว่าอย่างมากในแง่ของความยืดหยุ่น ซึ่งช่วยให้คุณรู้สึกอิสระมากขึ้นเมื่อออกแบบคุณสมบัติภาษาใหม่ รหัส parser เก่ายังคงอยู่ในขณะนี้และสามารถส่งคืนได้โดยใช้แฟล็ก "-X oldparser" หรือตัวแปรสภาพแวดล้อม "PYTHONOLDPARSER=1" แต่จะถูกลบออกในรีลีส 3.10 -
ที่ให้ไว้ ความสามารถสำหรับวิธีการขยาย C ในการเข้าถึงสถานะของโมดูลที่ถูกกำหนดโดยใช้การอ้างอิงตัวชี้โดยตรงแทนการค้นหาสถานะของโมดูลโดยใช้ฟังก์ชัน PyState_FindModule การเปลี่ยนแปลงนี้ช่วยให้คุณสามารถเพิ่มประสิทธิภาพของโมดูล C ได้โดยการลดหรือขจัดค่าใช้จ่ายในการตรวจสอบสถานะของโมดูลโดยสิ้นเชิง ในการเชื่อมโยงโมดูลกับคลาส มีการเสนอฟังก์ชัน C PyType_FromModuleAndSpec() เพื่อรับโมดูลและสถานะของโมดูล จึงเสนอฟังก์ชัน C PyType_GetModule() และ PyType_GetModuleState() และเพื่อให้วิธีการเข้าถึงคลาส ซึ่งมีการกำหนดไว้ มีการเสนอฟังก์ชัน C-function PyCMethod และธง METH_METHOD - คนเก็บขยะ
ส่ง จากการล็อกคอลเลกชั่นที่มีวัตถุที่สร้างชีวิตใหม่ซึ่งยังคงสามารถเข้าถึงได้จากภายนอกหลังจากที่ Finalizer ทำงาน - เพิ่มวิธีการ
os.pidfd_open ซึ่งอนุญาตให้ใช้ระบบย่อยเคอร์เนล Linux "pidfd" เพื่อจัดการกับสถานการณ์การนำ PID มาใช้ซ้ำ (pidfd เชื่อมโยงกับกระบวนการเฉพาะและไม่เปลี่ยนแปลง ในขณะที่ PID สามารถเชื่อมโยงกับกระบวนการอื่นได้หลังจากกระบวนการปัจจุบันที่เกี่ยวข้องกับ PID นั้นสิ้นสุดลง ). - การสนับสนุนข้อกำหนด Unicode ได้รับการอัพเดตเป็นเวอร์ชัน 13.0.0
- ตกรอบแล้ว
หน่วยความจำรั่ว เมื่อเริ่มต้นล่าม Python ใหม่ในกระบวนการเดียวกัน - ประสิทธิภาพของช่วงประเภททูเพิล ชุด ชุดแช่แข็ง รายการ และ dict ได้รับการปรับให้เหมาะสมแล้ว
ดำเนินการ ผ่านการใช้โปรโตคอลทางลัด Vectorcall เพื่อการเข้าถึงวัตถุที่เขียนด้วยภาษา C ได้เร็วขึ้น - โมดูล _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, ตัวดำเนินการ, ทรัพยากร, เวลา และ _weakref ถูกโหลดจาก
การเริ่มต้นในหลายขั้นตอน . - โมดูลไลบรารีมาตรฐาน audioop, ast, grp, _hashlib, pwd, _posixsubprocess, สุ่ม, เลือก, struct, termios และ zlib ได้รับการแปลงให้ใช้แบบจำกัด
เอบีไอที่มั่นคง ซึ่งแก้ปัญหาการทำงานของแอสเซมบลีของโมดูลส่วนขยายสำหรับ Python เวอร์ชันต่างๆ (เมื่ออัปเดตเวอร์ชัน ไม่จำเป็นต้องสร้างโมดูลส่วนขยายขึ้นใหม่ และโมดูลที่คอมไพล์สำหรับ 3.9 จะสามารถทำงานได้ในสาขา 3.10) - โมดูล asyncio ได้เลิกรองรับพารามิเตอร์ reuse_address เนื่องจากปัญหาด้านความปลอดภัยที่อาจเกิดขึ้น (การใช้ SO_REUSEADDR สำหรับ UDP บน Linux อนุญาตให้กระบวนการต่างๆ แนบซ็อกเก็ตการฟังเข้ากับพอร์ต UDP)
- มีการเพิ่มประสิทธิภาพใหม่ เช่น ปรับปรุงประสิทธิภาพของตัวจัดการสัญญาณในแอปพลิเคชันแบบมัลติเธรด ความเร็วที่เพิ่มขึ้นของโมดูลกระบวนการย่อยในสภาพแวดล้อม FreeBSD และการกำหนดตัวแปรชั่วคราวให้เร็วขึ้น (การกำหนดตัวแปรในนิพจน์ “สำหรับ y ใน [expr” ]” มีประสิทธิภาพเทียบเท่ากับนิพจน์ “y = expr” ") โดยทั่วไปแล้วการทดสอบส่วนใหญ่
แสดง ประสิทธิภาพลดลงเมื่อเทียบกับสาขา 3.8 (การเร่งความเร็วจะสังเกตได้ในการทดสอบ write_local และ write_deque เท่านั้น):หลามเวอร์ชัน 3.4 3.5 3.6 3.7 3.8 3.9
————— — — — — — —การเข้าถึงการอ่านตัวแปรและแอตทริบิวต์:
อ่าน_ท้องถิ่น 7.1 7.1 5.4 5.1 3.9 4.0
read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.8
read_global 15.5 19.0 14.3 13.6 7.6 7.7
read_builtin 21.1 21.6 18.5 19.0 7.5 7.7
read_classvar_from_คลาส 25.6 26.5 20.7 19.5 18.4 18.6
read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
read_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
read_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
read_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9การเข้าถึงการเขียนตัวแปรและแอตทริบิวต์:
write_local 8.7 9.3 5.5 5.3 4.3 4.2
write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
write_global 19.7 21.2 18.0 18.0 15.8 17.2
write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7การเข้าถึงการอ่านโครงสร้างข้อมูล:
อ่าน_รายการ 24.2 24.5 20.8 20.8 19.0 21.1
read_deque 24.7 25.5 20.2 20.6 19.8 21.6
read_dict 24.3 25.7 22.3 23.0 21.0 22.5
อ่าน_strdict 22.6 24.3 19.5 21.2 18.9 21.6การเข้าถึงการเขียนโครงสร้างข้อมูล:
เขียน_รายการ 27.1 28.5 22.5 21.6 20.0 21.6
write_deque 28.7 30.1 22.7 21.8 23.5 23.2
write_dict 31.4 33.3 29.3 29.2 24.7 27.8
write_strdict 28.4 29.9 27.5 25.2 23.1 29.8การดำเนินการสแต็ก (หรือคิว):
list_append_pop 93.4 112.7 75.4 74.2 50.8 53.9
deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
deque_append_popซ้าย 43.7 57.3 49.7 49.7 42.8 45.5วงจรจับเวลา:
ลูป_โอเวอร์เฮด 0.5 0.6 0.4 0.3 0.3 0.3 -
ลบแล้ว ฟังก์ชันและวิธีการของ Python 2.7 จำนวนมากที่เลิกใช้แล้วก่อนหน้านี้และส่งผลให้เกิด DeprecationWarning ในรีลีสก่อนหน้า รวมถึงเมธอด unescape() ใน html.parser.HTMLParser
tostring() และ fromstring() ใน array.array, isAlive() ใน threading.Thread, getchildren() และ getiterator() ใน ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() และ base64.decodestring()
ที่มา: opennet.ru