Python 3.6

Python 3.6 เบต้า 1 ได้เปิดตัวเมื่อวันที่ 12 กันยายน 2016 และสรุปฟีเจอร์ใหม่สามารถดูได้ที่:

ฟีเจอร์ไวยากรณ์ใหม่

สถานะ

PEP 498

การจัดรูปแบบสตริงแบบตรงตัว

สมบูรณ์

PEP 515

การใช้เครื่องหมายขีดล่างในตัวเลขแบบตรงตัว

สมบูรณ์

PEP 525

เจเนอเรเตอร์แบบอะซิงโครนัส

PEP 526

ไวยากรณ์สำหรับคำอธิบายตัวแปร (เบื้องต้น)

สมบูรณ์

PEP 530

คอมพรีเฮนชันแบบอะซิงโครนัส

ฟีเจอร์บิวต์อินใหม่

PEP 468

การรักษาลำดับของ kwargs ในฟังก์ชัน

PEP 487

การปรับแต่งการสร้างคลาสที่ง่ายขึ้น

บางส่วน [1]

PEP 520

การรักษาลำดับการกำหนด Attribute ของคลาส

การเปลี่ยนแปลงในไลบรารีมาตรฐาน

PEP 495

การแยกความกำกวมของเวลาท้องถิ่น

PEP 506

การเพิ่มโมดูล Secrets เข้าในไลบรารีมาตรฐาน

PEP 519

การเพิ่มโปรโตคอลเส้นทางระบบไฟล์

ภายใน CPython

PEP 509

การเพิ่มเวอร์ชันส่วนตัวให้กับ dict

ไม่ดำเนินการ

PEP 523

การเพิ่ม API สำหรับประเมินเฟรมใน CPython

การเปลี่ยนแปลงบน Linux/Windows

PEP 524

ทำให้ os.urandom() บล็อกบน Linux (ระหว่างการเริ่มต้นระบบ)

PEP 528

เปลี่ยนการเข้ารหัสคอนโซล Windows เป็น UTF-8

PEP 529

เปลี่ยนการเข้ารหัสระบบไฟล์ Windows เป็น UTF-8

การเปลี่ยนแปลงภาษาอื่นๆ:

ขณะนี้คำสั่ง global หรือ nonlocal ต้องปรากฏในโค้ดก่อนการใช้ชื่อที่เกี่ยวข้องครั้งแรกในขอบเขตเดียวกัน ก่อนหน้านี้จะเป็นเพียง SyntaxWarning

ปัจจุบันสามารถกำหนดเมธอดพิเศษเป็น None เพื่อระบุว่าการดำเนินการที่เกี่ยวข้องไม่พร้อมใช้งาน ตัวอย่างเช่น หากคลาสกำหนด __iter__() เป็น None คลาสนั้นจะไม่สามารถวนซ้ำได้

บรรทัด traceback ที่ซ้ำกันเป็นลำดับยาวจะถูกย่อเป็น [Previous line repeated {count} more times]

ขณะนี้ Import จะแสดงข้อยกเว้นใหม่ ModuleNotFoundError เมื่อไม่พบโมดูล โค้ดที่ตรวจสอบ ImportError (ใน try-except) จะยังคงทำงานได้

เมธอดของคลาสที่ใช้ super() แบบไม่มีอาร์กิวเมนต์จะทำงานได้อย่างถูกต้องเมื่อถูกเรียกจากเมธอด metaclass ระหว่างการสร้างคลาส

การเปลี่ยนแปลงในโมดูลบิวต์อิน:

array

ตัววนซ้ำของ array.array ที่หมดแล้วจะยังคงหมดอยู่แม้ว่า array ที่วนซ้ำจะถูกขยาย

binascii

ฟังก์ชัน b2a_base64() ขณะนี้รับอาร์กิวเมนต์คีย์เวิร์ด newline ที่เป็นตัวเลือกเพื่อควบคุมว่าจะต่อท้ายอักขระขึ้นบรรทัดใหม่กับค่าที่ส่งคืนหรือไม่

สมบูรณ์

cmath

ได้เพิ่มค่าคงที่ใหม่ cmath.tau (τ)

ค่าคงที่ใหม่: cmath.inf และ cmath.nan ที่สอดคล้องกับ math.inf และ math.nan รวมถึง cmath.infj และ cmath.nanj ที่สอดคล้องกับรูปแบบที่ใช้ใน complex repr

collections

ได้เพิ่มคลาสฐาน abstract ใหม่ Collection เพื่อแทนคลาส container ที่ระบุขนาดและวนซ้ำได้

คลาสฐาน abstract ใหม่ Reversible แทนคลาสที่วนซ้ำได้และยังมีเมธอด __reversed__()

คลาสฐาน abstract ใหม่ AsyncGenerator แทนเจเนอเรเตอร์แบบอะซิงโครนัส

ฟังก์ชัน namedtuple() ขณะนี้รับอาร์กิวเมนต์คีย์เวิร์ด module ที่เป็นตัวเลือก ซึ่งเมื่อระบุแล้วจะถูกใช้เป็น attribute __module__ ของคลาส named tuple ที่ส่งคืน

อาร์กิวเมนต์ verbose และ rename สำหรับ namedtuple() ขณะนี้เป็นแบบ keyword-only

อินสแตนซ์ collections.deque แบบเรียกซ้ำสามารถ pickle ได้แล้ว

hashlib

ได้เพิ่มฟังก์ชันแฮช BLAKE2 เข้าในโมดูล blake2b() และ blake2s() พร้อมใช้งานเสมอและรองรับฟีเจอร์ครบถ้วนของ BLAKE2

ได้เพิ่มฟังก์ชันแฮช SHA-3 sha3_224(), sha3_256(), sha3_384(), sha3_512() และฟังก์ชันแฮช SHAKE ได้แก่ shake_128() และ shake_256()

ฟังก์ชันการสร้างคีย์จากรหัสผ่าน scrypt() ขณะนี้พร้อมใช้งานกับ OpenSSL 1.1.0 และใหม่กว่า

json

json.load() และ json.loads() ขณะนี้รองรับอินพุตแบบไบนารี JSON ที่เข้ารหัสควรแสดงโดยใช้ UTF-8, UTF-16 หรือ UTF-32

math

ได้เพิ่มค่าคงที่ใหม่ math.tau (τ)

สมบูรณ์

os

เมธอด close() ใหม่ช่วยให้ปิด iterator ของ scandir() ได้อย่างชัดเจน ปัจจุบัน iterator ของ scandir() รองรับโปรโตคอล context manager

บน Linux ขณะนี้ os.urandom() จะบล็อกจนกว่า entropy pool ของ urandom ในระบบจะถูกเตรียมพร้อมเพื่อเพิ่มความปลอดภัย

syscall getrandom() ของ Linux (รับไบต์แบบสุ่ม) ขณะนี้เปิดเผยเป็นฟังก์ชันใหม่ os.getrandom()

re

เพิ่มการรองรับ modifier spans ในนิพจน์ปกติ ตัวอย่าง: '(?i:p)ython' ตรงกับ 'python' และ 'Python' แต่ไม่ตรงกับ 'PYTHON'; '(?i)g(?-i:v)r' ตรงกับ 'GvR' และ 'gvr' แต่ไม่ตรงกับ 'GVR'

กลุ่มของ Match object สามารถเข้าถึงได้ด้วย __getitem__ ซึ่งเทียบเท่ากับ group() ดังนั้น mo['name'] ขณะนี้เทียบเท่ากับ mo.group('name')

ปัจจุบัน Match objects รองรับอ็อบเจ็กต์แบบ index เป็น group indices

socket

ฟังก์ชัน ioctl() ขณะนี้รองรับรหัสควบคุม SIO_LOOPBACK_FAST_PATH

ขณะนี้รองรับค่าคงที่ getsockopt() ได้แก่ SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC และ SO_PASSSEC

ขณะนี้ setsockopt() รองรับรูปแบบ setsockopt(level, optname, None, optlen: int)

โมดูล socket ขณะนี้รองรับตระกูลที่อยู่ AF_ALG เพื่อเชื่อมต่อกับ Linux Kernel crypto API ได้เพิ่ม ALG_, SOL_ALG และ sendmsg_afalg()

ได้เพิ่มค่าคงที่ Linux ใหม่ TCP_USER_TIMEOUT และ TCP_CONGESTION

ssl

ssl รองรับ OpenSSL 1.1.0 โดยเวอร์ชันขั้นต่ำที่แนะนำคือ 1.0.2

นำ 3DES ออกจากชุด cipher suite เริ่มต้นและเพิ่ม ChaCha20 Poly1305 cipher suites

SSLContext มีการกำหนดค่าเริ่มต้นที่ดีขึ้นสำหรับตัวเลือกและ cipher

เซสชัน SSL สามารถคัดลอกจากการเชื่อมต่อฝั่ง client หนึ่งไปยังอีกการเชื่อมต่อด้วยคลาส SSLSession ใหม่ การ resume เซสชัน TLS สามารถเร่งความเร็วในการ handshake เริ่มต้น ลดเวลาแฝง และปรับปรุงประสิทธิภาพ

เมธอด get_ciphers() ใหม่สามารถใช้เพื่อรับรายการ cipher ที่เปิดใช้งานตามลำดับความสำคัญ

ค่าคงที่และ flag ทั้งหมดได้ถูกแปลงเป็น IntEnum และ IntFlags

ได้เพิ่มโปรโตคอล TLS เฉพาะสำหรับ server และ client ใน SSLContext

ได้เพิ่ม SSLContext.post_handshake_auth สำหรับเปิดใช้งาน และ ssl.SSLSocket.verify_client_post_handshake() สำหรับเริ่มการยืนยันตัวตนหลัง handshake ของ TLS 1.3

struct

ขณะนี้รองรับ IEEE 754 half-precision float ผ่านตัวระบุรูปแบบ 'e'

sys

ฟังก์ชัน getfilesystemencodeerrors() ใหม่ส่งคืนชื่อโหมดข้อผิดพลาดที่ใช้ในการแปลงระหว่างชื่อไฟล์ Unicode และชื่อไฟล์ bytes

zlib

ฟังก์ชัน compress() และ decompress() ขณะนี้รับ keyword arguments

หมายเหตุ