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?
