نحوه استفاده از Assignment Expressions در پایتون

مقدمه

در نسخه ۳.۸ پایتون که در اکتبر ۲۰۱۹ منتشر شد، قابلیتی به نام Assignment Expressions با سینتکس := به این زبان اضافه شد. این سینتکس گاهی با نام Walrus Operator (عملگر گراز دریایی) نیز شناخته می‌شود، چون شکل := تا حدی شبیه یک گراز دریایی با دندان‌های بلند است.

Assignment Expressions این امکان را فراهم می‌کنند که درون یک عبارت بزرگ‌تر، مقداردهی به متغیر انجام شود. هرچند استفاده از این قابلیت برای نوشتن کد صحیح ضروری نیست، اما می‌تواند کدهای پایتون را کوتاه‌تر و فشرده‌تر کند.
برای مثال، با استفاده از := می‌توان درون شرط‌های if مقداردهی انجام داد و از نوشتن خطوط جداگانه قبل یا بعد از شرط جلوگیری کرد.

در این آموزش، با چند مثال یاد می‌گیرید چگونه با استفاده از Assignment Expressions کدهای خلاصه‌تر و خواناتری بنویسید.


پیش‌نیازها

برای استفاده بهتر از این آموزش، موارد زیر را نیاز دارید:

  • پایتون نسخه ۳.۸ یا بالاتر (چون این قابلیت از این نسخه اضافه شده است)
  • دسترسی به کنسول تعاملی پایتون برای اجرای مثال‌ها
  • آشنایی اولیه با:
    • حلقه while
    • شرط‌های if
    • لیست کامپرهنشن (List Comprehension)
    • توابع در پایتون
      (البته این موارد الزامی نیستند)

استفاده از Assignment Expressions در شرط if

ابتدا یک مثال ساده را بررسی می‌کنیم:

some_list = [1, 2, 3]
if (list_length := len(some_list)) > 2:
    print("List length of", list_length, "is too long")

خروجی:

List length of 3 is too long

در این مثال:

  • یک لیست به نام some_list تعریف شده است.
  • در شرط if، مقدار طول لیست با len(some_list) محاسبه و همزمان در متغیر list_length ذخیره می‌شود.
  • چون مقدار طول لیست بیشتر از ۲ است، شرط برقرار شده و پیام چاپ می‌شود.

بدون استفاده از Assignment Expressions:

some_list = [1, 2, 3]
list_length = len(some_list)
if list_length > 2:
    print("List length of", list_length, "is too long")

در این حالت، یک خط اضافه برای مقداردهی نیاز داریم.

یا حتی حالت زیر:

some_list = [1, 2, 3]
if len(some_list) > 2:
    print("List length of", len(some_list), "is too long")

در اینجا مقدار طول لیست دوبار محاسبه می‌شود.

نتیجه:
Assignment Expressions باعث می‌شود:

  • خط اضافی حذف شود
  • از محاسبه تکراری جلوگیری شود

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


استفاده در حلقه while

Assignment Expressions در حلقه‌های while هم بسیار کاربردی هستند:

while (directive := input("Enter text: ")) != "stop":
    print("Received directive", directive)

در این مثال:

  • از کاربر ورودی گرفته می‌شود
  • مقدار ورودی در متغیر directive ذخیره می‌شود
  • تا زمانی که مقدار “stop” وارد نشود، حلقه ادامه دارد

نمونه اجرا:

Enter text: hello
Received directive hello
Enter text: example
Received directive example
Enter text: stop

بدون استفاده از Assignment Expressions:

directive = input("Enter text: ")
while directive != "stop":
    print("Received directive", directive)
    directive = input("Enter text: ")

در این حالت:

  • کد طولانی‌تر است
  • تابع input تکرار شده است

نسخه walrus هم کوتاه‌تر است هم خواناتر.


استفاده در List Comprehension

می‌توان از Assignment Expressions در لیست کامپرهنشن هم استفاده کرد.

مثال:

def slow_calculation(x):
    print("Multiplying", x, "*", x)
    return x * x

[result for i in range(3) if (result := slow_calculation(i)) > 0]

خروجی:

Multiplying 0 * 0
Multiplying 1 * 1
Multiplying 2 * 2
[1, 4]

در این مثال:

  • تابع slow_calculation عدد را در خودش ضرب می‌کند
  • در لیست کامپرهنشن، مقدار محاسبه‌شده در result ذخیره می‌شود
  • فقط مقادیری که بزرگ‌تر از صفر هستند به لیست اضافه می‌شوند

بدون Assignment Expressions:

[slow_calculation(i) for i in range(3) if slow_calculation(i) > 0]

خروجی:

Multiplying 0 * 0
Multiplying 1 * 1
Multiplying 1 * 1
Multiplying 2 * 2
Multiplying 2 * 2
[1, 4]

در این حالت:

  • تابع چند بار اجرا می‌شود
  • کارایی کاهش پیدا می‌کند

مزیت walrus:

  • هر مقدار فقط یک‌بار محاسبه می‌شود
  • کد بهینه‌تر و سریع‌تر است

جمع‌بندی

در این آموزش دیدید که Assignment Expressions (:=) چگونه می‌توانند:

  • مقداردهی را داخل شرط‌ها انجام دهند
  • کد را کوتاه‌تر کنند
  • از محاسبات تکراری جلوگیری کنند
  • خوانایی و کارایی کد را بهبود دهند

در عین حال:
استفاده بیش‌ازحد از این قابلیت می‌تواند خوانایی کد را کاهش دهد، پس با دقت از آن استفاده کنید.

از همراهی شما با پارمین کلود سپاسگزاریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

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

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