آموزش پایتون - عملگر گراز دریایی

عملگر والروس (گراز دریایی) (:=) نوع جدیدی از عملگرهای انتساب است که در پایتون ۳.۸ معرفی شد. این فصل درک روشنی از عملگر والروس و نحوه استفاده از آن برای کاهش تعداد خطوط کد پایتون به شما می‌دهد. (توضیح مترجم: کلمه Walrus به معنی گراز دریایی است، اما از آن‌جا که ترجمه آن در ادبیات برنامه‌نویسی متداول نیست، در این درس از نام اصلی و رایج آن یعنی «والروس» استفاده می‌کنیم).

عملگر والروس چیست؟

عملگر والروس (:=) برای انتساب مقدار به یک متغیر از طریق یک عبارت درون شرط‌های حلقه استفاده می‌شود. این عملگر زمانی مفید است که نیاز دارید از یک مقدار چند بار در یک حلقه استفاده کنید، اما نمی‌خواهید محاسبات را تکرار کنید. از این رو، به عنوان عملگر عبارت انتساب نیز شناخته می‌شود. نام «عملگر والروس» به این دلیل انتخاب شده است که ظاهر عملگر (:=) شبیه چشمان و عاج‌های یک گراز دریایی (Walrus) است.

Python Walrus Operator

سنتکس عملگر والروس به شرح زیر است −

variable := expression

# Example
n := len(arr) + 10
  • variable − این نام متغیری است که مقدار به آن انتساب داده می‌شود.
  • expression − عبارت ریاضی، فراخوانی تابع یا هر عبارت معتبر پایتون که یک مقدار را برمی‌گرداند.

مثالی از عملگر والروس

اکنون، بیایید به یک مثال نگاه کنیم تا درک کنیم چگونه عملگر والروس می‌تواند برای ساده‌سازی کد استفاده شود. کد زیر را در نظر بگیرید که از یک حلقه while برای خارج کردن عناصر از یک استک تا زمان خالی شدن آن استفاده می‌کند. در هر تکرار حلقه، طول استک را با استفاده از len(stack) محاسبه کرده و آن را به متغیر n انتساب می‌دهیم.

عملگر والروس به ما اجازه می‌دهد این دو عملیات را در یک خط ترکیب کنیم، کد زیر را ببینید −

# Traditional way
print("Using traditional way:")
stack = [1, 2, 3, 4, 5]
n = len(stack)
while len(stack) > 0:
    print(stack.pop(), end=" ")
print("\n\n")

# Simplify using walrus operator
print("Using walrus operator:")
stack = [1, 2, 3, 4, 5]
while (n := len(stack)) > 0:
    print(stack.pop(), end=" ")

خروجی هر دو کد بالا به صورت زیر خواهد بود −

Using traditional way:
5 4 3 2 1

Using walrus operator:
5 4 3 2 1

عملگر والروس برای لیست‌های جامع (List Comprehensions)

لیست‌های جامع روشی ساده برای ساخت لیست‌ها در پایتون با استفاده از یک خط کد هستند. عملگر والروس می‌تواند در لیست‌های جامع برای انتساب مقدار به یک متغیر به عنوان بخشی از عبارت استفاده شود.

در مثال زیر، نشان می‌دهیم که چگونه لیست‌های جامع و عملگر والروس کدی را که لیستی از توان دوم اعداد بزرگ‌تر از ۲۰ را از میان یک بازه ۱۰ عددی تولید می‌کند، ساده می‌سازند.

# Traditional way
print("Using traditional way:")
results = []
for x in range(10):
    y = x * x
    if y > 20:
        results.append(y)
print(results, "\n")


# Simplify using walrus operator
print("Using walrus operator:")
results = [y for x in range(10) if (y := x * x) > 20]
print(results)

خروجی هر دو کد بالا به صورت زیر خواهد بود −

Using traditional way:
[25, 36, 49, 64, 81]

Using walrus operator:
[25, 36, 49, 64, 81]

چه زمانی باید از استفاده از عملگر والروس اجتناب کرد؟

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

در سناریوهای زیر از استفاده از عملگر والروس اجتناب کنید −

  • عبارت انتساب بیش از حد پیچیده است و خواندن کد را سخت‌تر می‌کند.
  • انتساب مستقیم به یک متغیر محدود شده است. برای مثال، x := 10 منجر به خطای سنتکس (Syntax Error) خواهد شد.
  • استفاده از عملگر والروس در توابع lambda مجاز نیست. برای مثال، lambda x := 5: x * 2 منجر به خطای سنتکس خواهد شد.

نتیجه‌گیری

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

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.