برنامه نویسی

ویژگی زبان Deep Dive: تطبیق الگوی ساختاری پایتون

سلام، توسعه دهندگان همکار! امروز، ما عمیقاً به یکی از ویژگی های جدیدتر و هیجان انگیز پایتون می پردازیم: تطبیق الگوی ساختاری. این ویژگی که در Python 3.10 معرفی شده است، روشی قدرتمند و گویا را برای کار با ساختارهای داده پیچیده به ارمغان می آورد. بیایید بررسی کنیم که چگونه کار می کند و چگونه می توانید از آن در پروژه های خود استفاده کنید.

تطبیق الگوی ساختاری چیست؟

تطبیق الگوی ساختاری راهی برای بررسی ساختارهای داده و اجرای کد بر اساس شکل و محتوای آنهاست. این شبیه به سوییچ عبارات در زبان های دیگر است، اما بسیار قدرتمندتر است. با تطبیق الگو، می توانید:

  • مطابقت با انواع داده
  • ساختارهای داده پیچیده را تخریب کنید
  • از الگوهای عام و OR استفاده کنید
  • اتصال متغیرها در الگوها

بیایید به چند نمونه نگاه کنیم تا ببینیم این در عمل چگونه کار می کند.

نحو پایه

نحو اصلی برای تطبیق الگو از match و case کلمات کلیدی:

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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این مثال، ما در حال تطبیق با انواع مختلف هستیم. این _ در مورد آخر یک علامت عام است که با هر چیزی مطابقت دارد.

در حال تخریب

یکی از قدرتمندترین جنبه های تطبیق الگو، توانایی آن در تخریب ساختارهای داده پیچیده است:

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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا، ما در حال تخریب یک فرهنگ لغت و اتصال متغیرها در این فرآیند هستیم. ما همچنین از محافظ استفاده می کنیم (if age >= 18) برای اضافه کردن یک شرط اضافی به یک مورد.

OR الگوها

می توانید استفاده کنید | عملگر برای تعیین چندین الگو در یک مورد:

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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توالی تطبیق

تطبیق الگو به ویژه برای کار با دنباله هایی مانند لیست ها یا تاپل ها مفید است:

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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این مثال نشان می دهد که چگونه با دنباله هایی با طول های مختلف مطابقت داده شود و چگونه از آن استفاده کنید * اپراتور برای گرفتن عناصر باقی مانده

نتیجه گیری

تطبیق الگوی ساختاری یک ویژگی قدرتمند است که می‌تواند کد شما را خواناتر و رساتر کند، به‌ویژه زمانی که با ساختارهای داده‌ای پیچیده سروکار دارید. به ویژه در سناریوهایی مانند:

  • تجزیه آرگومان های خط فرمان
  • پیاده سازی ماشین های دولتی
  • کار با درخت های نحو انتزاعی
  • پردازش داده های ساخت یافته (به عنوان مثال، پاسخ های JSON از API ها)

حالا نوبت شماست! چگونه از تطبیق الگوی ساختاری در پروژه های خود استفاده کرده اید (یا چگونه می خواهید از آن استفاده کنید؟ تجربیات یا ایده های خود را در نظرات زیر به اشتراک بگذارید. آیا کاربردهای هوشمندانه ای برای این ویژگی پیدا کرده اید؟ هر چالشی که با آن روبرو شده اید؟ بحث کنیم!

به یاد داشته باشید، تطبیق الگو هنوز یک ویژگی نسبتاً جدید در پایتون است، بنابراین همیشه نسخه پایتون (3.10+) را قبل از استفاده از آن در پروژه‌های خود بررسی کنید. کد نویسی مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا