پرسش

عملکرد ستاره (*) و دو ستاره () در پارامترها چیست؟

What does double star (**) and star (*) do for parameters

در پارامترهای یک تابع ستاره (*) یا دو ستاره (**) چه عملکردی دارن؟

1403/05/29
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

وقتی در پارامترهای یک تابع در پایتون از ستاره (*) و دو ستاره (**) استفاده می‌کنی، این علامت‌ها به تو اجازه می‌دن تا با تعداد متغیرهای متفاوتی به تابع ورودی بدی. بیایید به طور جداگانه بررسی کنیم که هر کدوم از این علامت‌ها چه کاری انجام می‌دن:

  1. ستاره (*)

وقتی که در پارامترهای یک تابع از یک ستاره (*) استفاده می‌کنی، اون پارامتر هر تعداد آرگومان که در هنگام فراخوانی تابع بهش داده بشه رو به صورت یک تاپل (tuple) ذخیره می‌کنه. این مورد زمانی مفیده که بخوای تعداد دلخواهی ورودی به تابع بدی.

مثلا:

def my_function(*args):
    # args is a tuple containing all the extra positional arguments
    for arg in args:
        print(arg)
my_function(1, 2, 3)
output:
1
2
3

اینجا args یک تاپل شامل ۱، ۲ و ۳ هست.

  1. دو ستاره (**)

وقتی از دو ستاره () استفاده می‌کنی، اون پارامتر تمام آرگومان‌های کلیدی که به تابع داده می‌شه رو به صورت یک دیکشنری (dictionary) ذخیره می‌کنه. این زمانی مفیده که بخوای ورودی‌های کلیدی متفاوتی داشته باشی.

مثلا:

def my_function(**kwargs):
    # kwargs is a dictionary containing all the keyword arguments
    for key, value in kwargs.items():
        print(f"{key}: {value}")
my_function(name="Alice", age=25)
output:
name: Alice
age: 25

اینجا kwargs یک دیکشنری شامل کلیدهای "name" و "age" و مقادیر مربوطه است.

چه زمانی از این علامت‌ها استفاده کنیم؟

- از *args استفاده کن وقتی که تعداد پارامترهای موقعیت‌دار (positional) ناشناخته‌ای داری.

- از **kwargs استفاده کن وقتی که تعداد پارامترهای کلیدی (keyword) ناشناخته‌ای داری.

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

پاسخ: 1403/05/29
آخرین آپدیت: 1403/07/14