Keluaran bahasa pengaturcaraan Python 3.8

Selepas satu setengah tahun pembangunan dibentangkan keluaran bahasa pengaturcaraan utama Python 3.8. Kemas kini pembetulan untuk cawangan Python 3.8 dirancang dikeluarkan dalam tempoh 18 bulan. Kerentanan kritikal akan diperbaiki selama 5 tahun sehingga Oktober 2024. Kemas kini pembetulan untuk cawangan 3.8 akan dikeluarkan setiap dua bulan, dengan keluaran pembetulan pertama Python 3.8.1 dijadualkan pada bulan Disember.

Antara yang ditambah inovasi:

  • Sokongan operasi tugasan dalam ungkapan kompleks. Dengan pengendali ":=" baharu, adalah mungkin untuk melaksanakan operasi penetapan nilai di dalam ungkapan lain, contohnya, untuk mengelakkan panggilan fungsi berganda dalam pernyataan bersyarat dan apabila menentukan gelung:

    jika (n := len(a)) > 10:
    ...

    manakala (blok := f.read(256)) != ":
    ...

  • Sokongan sintaks baharu untuk menentukan hujah fungsi. Apabila menghitung argumen semasa definisi fungsi, anda kini boleh menentukan "/" untuk memisahkan argumen yang hanya boleh diberikan nilai berdasarkan susunan nilai dikira semasa panggilan fungsi, daripada argumen yang boleh diberikan dalam sebarang susunan (sintaks pembolehubah=nilai) ). Dari segi praktikal, ciri baharu ini membenarkan fungsi dalam Python untuk meniru sepenuhnya kelakuan fungsi sedia ada dalam C, dan juga untuk mengelak daripada mengikat nama tertentu, contohnya, jika nama parameter dirancang untuk ditukar pada masa hadapan.

    Bendera “/” melengkapkan bendera “*” yang telah ditambah sebelum ini, memisahkan pembolehubah yang mana hanya penugasan dalam bentuk “variable=value” boleh digunakan. Sebagai contoh, dalam fungsi "def f(a, b, /, c, d, *, e, f):" pembolehubah "a" dan "b" hanya boleh diberikan mengikut susunan nilai disenaraikan. ,
    pembolehubah “e” dan “f”, hanya melalui tugasan “variable=value”, dan pembolehubah “c” dan “d” dalam mana-mana cara berikut:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Ditambah C API baharu
    untuk mengkonfigurasi parameter permulaan Python, membenarkan kawalan sepenuhnya ke atas semua konfigurasi dan menyediakan kemudahan pengendalian ralat lanjutan. API yang dicadangkan memudahkan untuk membenamkan fungsi penterjemah Python ke dalam aplikasi C lain;

  • Dilaksanakan protokol Vectorcall baharu untuk akses lebih pantas kepada objek yang ditulis dalam bahasa C. Dalam CPython 3.8, akses kepada Vectorcall masih terhad kepada penggunaan dalaman; pemindahan ke kategori API boleh diakses secara umum dirancang dalam CPython 3.9;
  • Ditambah panggilan ke Runtime Audit Hooks, yang menyediakan aplikasi dan rangka kerja dalam Python dengan akses kepada maklumat peringkat rendah tentang kemajuan skrip untuk mengaudit tindakan yang dilakukan (contohnya, anda boleh menjejaki import modul, membuka fail, menggunakan jejak, mengakses soket rangkaian, menjalankan kod melalui exec, eval dan run_mod);
  • Dalam modul jeruk terjamin sokongan untuk protokol Pickle 5, digunakan untuk mensiri dan menyahsiri objek. Pickle membolehkan anda mengoptimumkan pemindahan sejumlah besar data antara proses Python dalam konfigurasi berbilang teras dan berbilang nod dengan mengurangkan bilangan operasi penyalinan memori dan menggunakan teknik pengoptimuman tambahan seperti menggunakan algoritma pemampatan khusus data. Versi kelima protokol ini terkenal dengan penambahan mod penghantaran luar jalur, di mana data boleh dihantar secara berasingan daripada aliran jeruk utama.
  • Secara lalai, versi keempat protokol Pickle diaktifkan, yang, berbanding dengan versi ketiga yang sebelum ini ditawarkan secara lalai, membolehkan prestasi yang lebih tinggi dan pengurangan saiz data yang dihantar;
  • Dalam modul menaip Beberapa ciri baharu diperkenalkan:
    • Kelas TypedDict untuk tatasusunan bersekutu di mana maklumat jenis dinyatakan secara eksplisit untuk data yang dikaitkan dengan kunci (“TypedDict('Point2D', x=int, y=int, label=str)”).
    • Jenis Secara harfiah, yang membolehkan anda mengehadkan parameter atau mengembalikan nilai kepada beberapa nilai yang dipratentukan ("Literal['connected', 'disconnected']").
    • Reka bentuk "Final", yang memungkinkan untuk menentukan nilai pembolehubah, fungsi, kaedah dan kelas yang tidak boleh diubah atau ditugaskan semula ("pi: Final[float] = 3.1415926536").
  • Menambah keupayaan untuk menetapkan cache untuk fail yang disusun dengan kod bait, disimpan dalam pepohon FS yang berasingan dan dipisahkan daripada direktori dengan kod. Laluan untuk menyimpan fail dengan bytecode ditetapkan melalui pembolehubah PYTHONPYCACHEPREFIX atau pilihan "-X pycache_prefix";
  • Dilaksanakan keupayaan untuk mencipta binaan nyahpepijat Python yang menggunakan ABI yang serupa dengan keluaran, yang membolehkan anda memuatkan sambungan yang ditulis dalam bahasa SI, disusun untuk keluaran stabil, dalam binaan nyahpepijat;
  • f-strings (harfiah berformat diawali dengan 'f') menyediakan sokongan untuk operator = (contohnya, "f'{expr=}'"), yang membolehkan anda menukar ungkapan kepada teks untuk penyahpepijatan yang lebih mudah. Sebagai contoh:

    ››› pengguna = 'eric_idle'
    ››› ahli_sejak = tarikh(1975, 7, 31)
    ››› f'{user=} {ahli_sejak=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Ungkapan "terus» dibenarkan untuk digunakan di dalam blok akhirnya;
  • Menambah modul baharu multiprocessing.shared_memory, membenarkan penggunaan segmen memori yang dikongsi dalam konfigurasi berbilang proses;
  • Pada platform Windows, pelaksanaan asyncio telah dialihkan untuk menggunakan kelas ProactorEventLoop;
  • Prestasi arahan LOAD_GLOBAL telah meningkat kira-kira 40% disebabkan oleh penggunaan mekanisme caching kod objek baharu.

Sumber: opennet.ru

Tambah komen