Ini Dia Yang Baru Di Python 3.11
Python 3.11.2 adalah versi terbaru dari bahasa pemrograman populer, dan ini mencakup sejumlah fitur dan peningkatan baru. Di artikel blog ini, kita akan melihat beberapa fitur baru di Python 3.11 dan memberikan beberapa kode contoh untuk Anda mulai.
Ringkasan
Python 3.11 10–60% lebih cepat dari 3.10. Mengukur kecepatan 1,25x pada package benchmark standar. Ada pengecualian
, kecepatan
, perbaikan sintaks
.
Pengecualian
Mulai sekarang Anda dapat memunculkan banyak pengecualian dengan menggunakan grup pengecualian.
PEP 654 memperkenalkan fitur bahasa yang memungkinkan sebuah program untuk memunculkan dan menangani beberapa pengecualian yang tidak terkait secara bersamaan. Tipe bawaan ExceptionGroup
dan BaseExceptionGroup
memungkinkan untuk mengelompokkan pengecualian dan meningkatkannya bersama-sama, dan sintaks exception*
baru menggeneralisasi kecuali untuk mencocokkan subgrup dari grup pengecualian.
https://docs.python.org/3/whatsnew/3.11.html#whatsnew311-pep654
Anda juga dapat menambahkan catatan ke pengecualian Anda dengan menggunakan ini, Anda dapat memberikan informasi lebih banyak dengan mudah. Anda perlu menangkap pengecualian dengan menggunakan try except
kemudian Anda perlu menambahkan catatan, dan meningkatkannya lagi
try:
i = 1 / 0
except Exception as e:
e.add_note("New Note: Zero Division Error")
raise
Traceback (most recent call last):
File "C:/Users/Sarper/Desktop/test.py", line 2, in <module>
i = 1 / 0
ZeroDivisionError: division by zero
New Note: Zero Division Error
Mengetik
Tipe baru adalah add Self
yang merupakan self
normal.
Fitur Baru Terkait Petunjuk Ketik
Bagian ini membahas perubahan besar yang mempengaruhi petunjuk jenis PEP 484 dan modul typing.
Ini contohnya:
from typing import Self
class MyClass:
def __init__(self, num):
self.num = num
def create_class(self) -> Self:
return MyClass(3) # returning new class
my_class = MyClass(2)
print(my_class.create_class())
# OUTPUT:
# <__main__.MyClass object at 0x000002477E1D0250>
from typing import Self
class MyClass:
def __init__(self, num):
self.num = num
def return_class(self) -> Self:
return self # returning self
my_class = MyClass(2)
print(my_class.return_class())
# OUTPUT:
<__main__.MyClass object at 0x0000014B89E71350>
Menandai masing-masing item TypedDict
sebagai wajib atau tidak wajib
Required
dan NotRequired
menyediakan cara langsung untuk menandai apakah setiap item di TypedDict
harus ada. Sebelumnya, ini hanya mungkin menggunakan inheritance.
Semua bidang masih wajib diisi secara default, kecuali parameter total disetel ke False
, dalam hal ini semua bidang tetap tidak wajib diisi secara default. Misalnya, berikut ini menentukan TypedDict
dengan satu kunci wajib dan satu kunci tidak wajib:
Membuat kamus khusus merupakan kemampuan yang ampuh jika ingin membangun library dan mengurangi error yang mungkin terjadi dari pengguna.
class Movie(TypedDict):
title: str
year: NotRequired[int]
m1: Movie = {"title": "Black Panther", "year": 2018} # OK
m2: Movie = {"title": "Star Wars"} # OK (year is not required)
m3: Movie = {"year": 2022} # ERROR (missing required field title)
Definisi berikut setara:
class Movie(TypedDict, total=False):
title: Required[str]
year: int
Modul yang Ditingkatkan
asyncio contextlib dataclasses datatime enum fcntl fractions functools haslib inpect locale logging math operator os pathlib re shutlit soket sqlite3 string sys sysconfig tempfile waktu threading tkinter traceback menulis unicodedata unittest venv peringatan zipfile
Lihat di sini untuk informasi selanjutnya
Percepatan Operasi
-
Operasi biner
x+x; x*x; xx;
10% -
Berlangganan
a[i]
10–25% -
Simpan subskrip
a[i] = z
10–25% -
Memanggil
f(arg) C(arg)
20% -
Muat len
cetak variabel global [1] -
Muat atribut
o.attr
[3] -
Memuat metode untuk panggilan
o.meth()
10–20% -
Menyimpan atribut
o.attr = z
2% di pyperformance -
Urutan Buka Kemasan
*seq
8%
Cari informasi lebih lanjut