Fitur Python 3 layak digunakan

Banyak programmer mulai beralih dari versi kedua Python ke yang ketiga karena fakta bahwa dukungan segera untuk Python 2 akan dihentikan . Penulis artikel, terjemahan yang kami terbitkan, mencatat bahwa sebagian besar kode Python 3 yang ia lihat, terlihat seperti kode dengan tanda kurung, ditulis dengan Python 2. Menurutnya, ia sendiri berdosa seperti itu . Di sini dia memberikan contoh beberapa fitur hebat yang tersedia hanya untuk mereka yang menggunakan Python 3. Dia berharap fitur ini akan membuat hidup lebih mudah bagi mereka yang belajar tentang mereka.



Semua contoh dalam artikel ini ditulis menggunakan Python 3.7. Deskripsi setiap fitur berisi informasi tentang versi minimum Python yang diperlukan untuk penggunaannya.

Format String (3.6+)


Tanpa string, sulit untuk menulis sesuatu yang berguna dalam bahasa pemrograman apa pun. Tetapi untuk kerja efektif dengan string, pengembang membutuhkan alat yang nyaman. Alat seperti itu yang memungkinkan Anda untuk beroperasi dengan struktur yang rumit tanpa kehilangan ketenangan pikiran Anda. Sebagian besar pengembang Python menggunakan metode format :

 user = "Jane Doe" action = "buy" log_message = 'User {} has logged in and did an action {}.'.format( user, action ) print(log_message) # User Jane Doe has logged in and did an action buy. 

Python 3, bersama dengan metode format , mendukung format string ( f-string , f-string). Mereka adalah alat yang fleksibel untuk melakukan berbagai manipulasi string. Beginilah contoh sebelumnya yang ditulis ulang menggunakan format string:

 user = "Jane Doe" action = "buy" log_message = f'User {user} has logged in and did an action {action}.' print(log_message) # User Jane Doe has logged in and did an action buy. 

Modul Pathlib (3.4+)


Format string adalah teknologi yang luar biasa, tetapi alat khusus telah dibuat untuk bekerja dengan beberapa baris, seperti jalur file, yang sangat menyederhanakan manipulasi mereka. Python 3 memiliki modul pathlib , yang merupakan abstraksi yang nyaman untuk bekerja dengan path file. Jika Anda belum yakin akan kegunaan modul ini untuk menyelesaikan masalah Anda, lihat materi ini .

 from pathlib import Path root = Path('post_sub_folder') print(root) # post_sub_folder path = root / 'happy_user' #    print(path.resolve()) # /home/weenkus/Workspace/Projects/DataWhatNow-Codes/how_your_python3_should_look_like/post_sub_folder/happy_user 

Ketik Anotasi (3,5+)


Manakah yang lebih baik - mengetik statis atau dinamis? Mungkin hampir setiap programmer memiliki jawaban sendiri untuk pertanyaan sulit ini. Saya serahkan kepada pembaca bagaimana tepatnya mereka mengetikkan program mereka. Tapi saya pikir itu baik bagi semua orang untuk setidaknya tahu bahwa Python 3 mendukung anotasi jenis .

 def sentence_has_animal(sentence: str) -> bool: return "animal" in sentence sentence_has_animal("Donald had a farm without animals") # True 

Transfer (3.4+)


Python 3 mendukung, berkat kelas Enum , mekanisme sederhana untuk bekerja dengan enumerasi . Penghitungan nyaman untuk menyimpan daftar konstanta. Konstanta, jika tidak, secara acak tersebar dalam kode.

 from enum import Enum, auto class Monster(Enum):   ZOMBIE = auto()   WARRIOR = auto()   BEAR = auto()  print(Monster.ZOMBIE) # Monster.ZOMBIE 

Dari dokumentasi Python 3, Anda dapat mengetahui bahwa enumerasi adalah kumpulan nama simbolik (anggota) yang dikaitkan dengan nilai unik dan tidak dapat diubah. Anggota daftar tunggal dapat dibandingkan untuk identitas. Pencacahan dapat dilewati.

 for monster in Monster:   print(monster) # Monster.ZOMBIE # Monster.WARRIOR # Monster.BEAR 

Cache LRU internal (3.2+)


Saat ini, mekanisme caching digunakan di hampir semua perangkat lunak dan sistem perangkat keras. Python 3 sangat menyederhanakan caching dengan dekorator lru_cache , yang mengimplementasikan algoritma caching LRU ( Paling Baru Digunakan ).

Di bawah ini adalah fungsi yang menghitung angka Fibonacci. Fungsi ini dipaksa berkali-kali untuk melakukan operasi yang sama selama panggilan rekursif. Hasilnya, ternyata kinerjanya dapat ditingkatkan melalui caching.

 import time def fib(number: int) -> int:   if number == 0: return 0   if number == 1: return 1     return fib(number-1) + fib(number-2) start = time.time() fib(40) print(f'Duration: {time.time() - start}s') # Duration: 30.684099674224854s 

Sekarang kita menggunakan lru_cache untuk mengoptimalkan fungsi ini (teknik optimisasi ini disebut memoisasi ). Akibatnya, waktu eksekusi fungsi yang sebelumnya diukur dalam detik sekarang diukur dalam nanodetik.

 from functools import lru_cache @lru_cache(maxsize=512) def fib_memoization(number: int) -> int:   if number == 0: return 0   if number == 1: return 1     return fib_memoization(number-1) + fib_memoization(number-2) start = time.time() fib_memoization(40) print(f'Duration: {time.time() - start}s') # Duration: 6.866455078125e-05s 

Membongkar objek yang dapat diulang (3.0+)


Saat membongkar objek yang dapat diulang, Anda dapat menggunakan variabel yang namanya diawali oleh tanda bintang. Segala sesuatu yang tidak sesuai dengan variabel lain masuk ke variabel tersebut. Jadi, dalam contoh berikut, nilai pertama dan terakhir dari daftar yang dibentuk oleh range(5) perintah jatuh ke dalam variabel head dan tail . Segala sesuatu yang berada di antara nilai pertama dan terakhir masuk ke variabel body .

 head, *body, tail = range(5) print(head, body, tail) # 0 [1, 2, 3] 4 py, filename, *cmds = "python3.7 script.py -n 5 -l 15".split() print(py) print(filename) print(cmds) # python3.7 # script.py # ['-n', '5', '-l', '15'] first, _, third, *_ = range(10) print(first, third) # 0 2 

Kelas Data (3.7+)


Python 3 memperkenalkan kelas data . Mereka memberi programmer banyak kebebasan bertindak. Mereka dapat digunakan untuk mengurangi jumlah kode boilerplate. Faktanya adalah bahwa dekorator dataclass secara otomatis menghasilkan metode khusus, seperti __init__() dan __repr__() . Dalam teks resmi dari proposal yang sesuai , mereka digambarkan sebagai "tuple yang dapat dinamai dengan nilai default." Berikut adalah contoh membuat kelas tanpa menggunakan dekorator dataclass :

 class Armor:     def __init__(self, armor: float, description: str, level: int = 1):       self.armor = armor       self.level = level       self.description = description                  def power(self) -> float:       return self.armor * self.level  armor = Armor(5.2, "Common armor.", 2) armor.power() # 10.4 print(armor) # <__main__.Armor object at 0x7fc4800e2cf8> 

Ini sama, tetapi sudah ditulis menggunakan dataclass :

 from dataclasses import dataclass @dataclass class Armor:   armor: float   description: str   level: int = 1     def power(self) -> float:       return self.armor * self.level  armor = Armor(5.2, "Common armor.", 2) armor.power() # 10.4 print(armor) # Armor(armor=5.2, description='Common armor.', level=2) 

Paket dukungan folder tanpa file __init__.py (3.3+)


Salah satu cara untuk menyusun kode Python adalah dengan menggunakan paket (paket ditempatkan di folder yang berisi file __init__.py ). Ini adalah contoh dari dokumentasi resmi:

 sound/                                 __init__.py                 sound     formats/                                   __init__.py             wavread.py             wavwrite.py             aiffread.py             aiffwrite.py             auread.py             auwrite.py             ...     effects/                                  __init__.py             echo.py             surround.py             reverse.py             ...     filters/                                 __init__.py             equalizer.py             vocoder.py             karaoke.py             ... 

Saat menggunakan Python 2, masing-masing folder yang disebutkan dalam contoh harus memiliki file __init__.py . Berkat file ini, folder tersebut dianggap sebagai paket Python. Di Python 3, dengan munculnya fitur Paket Namespace Tersirat , folder seperti ini tidak lagi diperlukan.

 sound/                                 __init__.py                 sound     formats/                                   wavread.py             wavwrite.py             aiffread.py             aiffwrite.py             auread.py             auwrite.py             ...     effects/                                  echo.py             surround.py             reverse.py             ...     filters/                                 equalizer.py             vocoder.py             karaoke.py             ... 

Perlu dicatat bahwa pada kenyataannya, semuanya tidak begitu sederhana. Yaitu, sesuai dengan spesifikasi resmi ini , file __init__.py masih diperlukan untuk paket reguler. Jika Anda menghapusnya dari folder, paket berubah menjadi paket namespace yang disebut, yang berlaku pembatasan tambahan.

Ringkasan


Tidak semua fitur menarik Python 3 tercakup dalam artikel ini, tetapi kami harap Anda menemukan sesuatu yang bermanfaat di sini. Kode sampel dapat ditemukan di repositori ini .

Pembaca yang budiman! Fitur apa dari Python 3 yang akan Anda tambahkan ke daftar di sini?

Source: https://habr.com/ru/post/id452564/


All Articles