Helo, rakan pembangun! Hari ini, kami menyelam jauh ke dalam salah satu ciri Python yang lebih baharu dan lebih menarik: padanan corak struktur. Diperkenalkan dalam Python 3.10, ciri ini membawa cara yang berkuasa dan ekspresif untuk bekerja dengan struktur data yang kompleks. Mari terokai cara ia berfungsi dan cara anda boleh menggunakannya dalam projek anda.
Padanan corak struktur ialah satu cara untuk memeriksa struktur data dan melaksanakan kod berdasarkan bentuk dan kandungannya. Ia serupa dengan menukar pernyataan dalam bahasa lain, tetapi lebih berkuasa. Dengan padanan corak, anda boleh:
Mari kita lihat beberapa contoh untuk melihat cara ini berfungsi dalam amalan.
Sintaks asas untuk pemadanan corak menggunakan padanan dan kata kunci huruf besar kecil:
def describe_type(data): match data: case int(): return "It's an integer" case str(): return "It's a string" case list(): return "It's a list" case _: return "It's something else" print(describe_type(42)) # Output: It's an integer print(describe_type("Hello")) # Output: It's a string print(describe_type([1, 2, 3])) # Output: It's a list print(describe_type({1, 2, 3})) # Output: It's something else
Dalam contoh ini, kami memadankan dengan jenis yang berbeza. _ dalam kes terakhir ialah kad bebas yang sepadan dengan apa sahaja.
Salah satu aspek padanan corak yang paling berkuasa ialah keupayaannya untuk memusnahkan struktur data yang kompleks:
def process_user(user): match user: case {"name": str(name), "age": int(age)} if age >= 18: return f"{name} is an adult" case {"name": str(name), "age": int(age)}: return f"{name} is a minor" case _: return "Invalid user data" print(process_user({"name": "Alice", "age": 30})) # Output: Alice is an adult print(process_user({"name": "Bob", "age": 15})) # Output: Bob is a minor print(process_user({"name": "Charlie"})) # Output: Invalid user data
Di sini, kami sedang memusnahkan kamus dan mengikat pembolehubah dalam proses. Kami juga menggunakan pengawal (jika umur >= 18) untuk menambah syarat tambahan pada kes.
Anda boleh menggunakan | operator untuk menentukan berbilang corak dalam satu kes:
def classify_number(num): match num: case 0 | 1 | 2: return "Small number" case int(x) if x > 1000: return "Big number" case int(): return "Medium number" case _: return "Not a number" print(classify_number(1)) # Output: Small number print(classify_number(500)) # Output: Medium number print(classify_number(1001)) # Output: Big number print(classify_number("hello")) # Output: Not a number
Padanan corak amat berguna untuk bekerja dengan jujukan seperti senarai atau tupel:
def analyze_sequence(seq): match seq: case []: return "Empty sequence" case [x]: return f"Single-element sequence: {x}" case [x, y]: return f"Two-element sequence: {x} and {y}" case [x, *rest]: return f"Sequence starting with {x}, followed by {len(rest)} more elements" print(analyze_sequence([])) # Output: Empty sequence print(analyze_sequence([1])) # Output: Single-element sequence: 1 print(analyze_sequence([1, 2])) # Output: Two-element sequence: 1 and 2 print(analyze_sequence([1, 2, 3, 4])) # Output: Sequence starting with 1, followed by 3 more elements
Contoh ini menunjukkan cara untuk memadankan jujukan dengan panjang yang berbeza dan cara menggunakan operator * untuk menangkap elemen yang tinggal.
Padanan corak struktur ialah ciri berkuasa yang boleh menjadikan kod anda lebih mudah dibaca dan ekspresif, terutamanya apabila berurusan dengan struktur data yang kompleks. Ia amat berguna dalam senario seperti:
Kini giliran anda! Bagaimanakah anda menggunakan (atau bagaimana anda merancang untuk menggunakan) padanan corak struktur dalam projek anda? Kongsi pengalaman atau idea anda dalam komen di bawah. Pernahkah anda menemui apa-apa kegunaan yang bijak untuk ciri ini? Sebarang cabaran yang anda hadapi? Jom bincang!
Ingat, padanan corak masih merupakan ciri yang agak baharu dalam Python, jadi sentiasa semak versi Python anda (3.10 ) sebelum menggunakannya dalam projek anda. Selamat mengekod!
Atas ialah kandungan terperinci Ciri Bahasa Deep Dive: Padanan Corak Struktur Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!