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)  
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)  
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)  
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")  
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)  
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)  
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')  
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')  
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)  
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()  
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()  
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?
