Saya kebanyakannya bekerja dengan Python dan menyemak kod hampir setiap hari. Dalam pemformatan & linting asas kod kami dikendalikan oleh kerja CI menggunakan black & mypy. Jadi, kami hanya fokus pada perubahan.
Apabila bekerja dalam pasukan, anda sudah tahu jenis kod yang diharapkan daripada ahli pasukan tertentu. Ulasan kod menjadi menarik apabila orang baharu menyertai pasukan. Saya katakan menarik, kerana setiap orang mempunyai beberapa gaya pengekodan yang mereka menggunakannya secara tidak sedar; baik atau buruk! Seperti saya ada,
# I used (long back) to do def func(a: int, b: Optional[list] = None, c: Optional[Dict] = None): if b is None: b = [] if c is None: c = {} # Instead I do def func(a: int, b: Optional[list] = None, c: Optional[Dict] = None): b = b or [] c = c or {}
Ini ialah kes penggunaan mudah di mana anda mengembalikan rentetan atau memanggil func berdasarkan beberapa nilai
Nota: mulai 3.10 anda harus menggunakan padanan dan bukannya ini.
def get_number_of_wheels(vehicle: str): if vehicle == "car": wheels = 2 elif vehicle == "bus": wheels = 6 elif vehicle == "bicycle": wheels = 2 else: raise ... # I prefer doing, def get_number_of_wheels(vehicle: str): return { "car": 2, "bus": 6, "bicycle": 2 }[vehicle] # Raise is now KeyError
Di atas adalah beberapa contoh, orang yang menyemak kod saya akan mempunyai lebih banyak contoh.
Baru-baru ini, Pembangun baharu telah menyertai pasukan saya dan saya melihat corak yang saya suka tetapi saya meminta untuk menukarnya kepada mudah jika..selain itu. Saya akan tunjukkan coraknya dahulu kemudian berikan alasan saya untuk meminta tukar.
Kod ialah penghias yang melakukan sesuatu pada parameter. Mari tulis penghias ringkas (tidak berguna) yang akan mencetak bilangan args & kwarg yang mana fungsi/kaedah dipanggil.
def counter(is_cls_method: bool = False): """ print number of args & kwargs for func/method """ def outer(f): def inner(*args, **kwargs): args_cnt = len(args) kwargs_cnt = len(kwargs) print(f"{f.__name__} called with {args_cnt=} & {kwargs_cnt=}") return f(*args, **kwargs) return inner return outer @counter() def test1(a, b, c): pass class A: @counter(is_cls_method=True) def test1(self, a, b, c): pass print("function") test1(1, 2, c=3) test1(a=1, b=2, c=3) print("method") a = A() a.test1(1, 2, 3) a.test1(1, b=2, c=3)
Apabila menjalankan kod ini, anda sepatutnya melihat
function test1 called with args_cnt=2 & kwargs_cnt=1 test1 called with args_cnt=0 & kwargs_cnt=3 method test1 called with args_cnt=4 & kwargs_cnt=0 test1 called with args_cnt=2 & kwargs_cnt=2
Ia berfungsi dengan baik tetapi untuk kaedah, ia juga mengira sendiri. jadi mari kita betulkan!
def counter(is_cls_method: bool = False): def outer(f): def inner(*args, **kwargs): args_cnt = len(args) if is_cls_method: # Check added args_cnt -= 1 # Reduced count by 1 kwargs_cnt = len(kwargs) print(f"{f.__name__} called with {args_cnt=} & {kwargs_cnt=}") return f(*args, **kwargs) return inner return outer
Ini adalah klausa if yang mudah, tetapi pembangun baharu melakukan perkara lain yang menarik penggunaan boolean.
Saya hanya menunjukkan kod yang telah ditukar...
args_cnt = len(args[is_cls_method:])
Penyelesaian adalah lebih baik daripada menggunakan if, kerana bool dalam python hanyalah int. Kod asal lebih panjang sedikit dan perasan perubahan kecil ini tidak jelas, juga asas kod yang digunakan oleh pengguna yang merupakan pengguna ular sawa asas. Dan, jika anda perlu meneka apa yang dilakukan oleh barisan, saya fikir anda harus menukar untuk menjadikannya jelas.
Apakah pendapat anda tentang perkara ini, Adakah anda menggunakan boolean sebagai indeks?
Adakah anda ada lagi corak ular sawa seperti ini?
Atas ialah kandungan terperinci Python: Corak Kod Menarik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!