آشنایی با نحوه ی تعریف و فراخوانی فانکشن هایی با تعداد پارامترهای متغیر در زبان پایتون


در تمام فانکشن هایی که تا به حال در برنامه های خود آن ها را تعریف کرده ایم، تعداد پارامترها از همان ابتدا ثابت و مشخص بود. در واقع بیش تر فانکشن ها در برنامه های پایتون به این شکل تعریف می شوند، چرا که در این صورت رفع خطاهای احتمالی آسان تر است. با این حال گاهی مواردی پیش می آید که نمی توانیم تعداد پارامترهای فانکشن را در زمان تعریف آن تعیین کنیم. برای مثال فانکشن از پیش تعریف شده ی ()print را در نظر بگیرید. بارها در زمان فراخوانی این فانکشن دیده ایم که می توانیم به تعداد دلخواه به آن آرگومان بدهیم. در این آموزش به بررسی چنین فانکشن هایی می پردازیم.

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

def varArgFunc(*var_arg):
    print(*var_arg)
varArgFunc() # 0 argument
varArgFunc('Sokan','Academy') # 2 arguments
varArgFunc(1,2,3,4,5) # 5 arguments
varArgFunc(9, 'Nine') # 2 arguments 
varArgFunc ('\n','***','\n','* *','\n','***' ,'\n') # 7 arguments

اسکریپت این برنامه را در فایل varArgFunc.py ذخیره می کنیم. پس از اجرای برنامه خروجی های زیر حاصل می شود:

========== RESTART: D:/SokanAcademy/Python/varArgFunc.py ==========

Sokan Academy
1 2 3 4 5
9 Nine

 *** 
 * * 
 ***

>>>

همان طور که می بینید خروجی حاصل از اولین دستور فراخوانی تابع یک خط خالی است، چون در این دستور، فانکشن هیچ آرگومانی نگرفته است. در دستور فراخوانی دوم نیز دو آرگومان از نوع استرینگ به فانکشن داده شده است، تابع پرینت هر یک از این آرگومان ها را به ترتیب با ایجاد یک اسپیس یا «فاصله» از هم چاپ می کند. سایر دستورات فراخوانی نیز به همین صورت عمل می کنند، به طوری که در هر دستور آرگومان های داده شده به فانکشن به ترتیب به پارامتر یا متغیر var_arg* ارجاع داده می شوند و با چاپ هر آرگومان، پارامتر فانکشن به آرگومان بعدی منتسب می شود. در دستور فراخوانی چهارم می بینیم که یکی از آرگومان ها از نوع int و دیگری از نوع استرینگ است. بنابراین با توجه به این مثال می فهمیم که هیچ نیازی نیست تمام آرگومان ها از یک نوع یا کلاس باشند. در آموزش های بعدی از فانکشن هایی با تعداد پارامترهای متغیر بیش تر استفاده خواهیم کرد و با کاربرد آن ها آشنا خواهیم شد.

حال برنامه ی زیر را در نظر بگیرید. در این برنامه فانکشن ()varArgFunc را اندکی تغییر می دهیم و فانکشن جدید را با سه آرگومان فراخوانی می کنیم:

def varArgFunc1(*var_arg):
    print(*var_arg)
    print(var_arg)
    print(len(var_arg))
    
varArgFunc1(1,2,3)

خروجی حاصل از اجرای این برنامه به صورت زیر است:

1 2 3
(1, 2, 3)
3

همان طور که می بینید دستور اول در بدنه ی فانکشن مانند قبل آرگومان های ورودی به فانکشن را یک به یک با ایجاد یک فاصله چاپ می کند. دستور دوم در بدنه ی فانکشن دقیقاً مشابه دستور اول است با این تفاوت که کاراکتر * از ابتدای شناسه ی پارامتر فانکشن حذف شده و آن گاه از آن به عنوان آرگومان پرینت استفاده شده است. همان طور که می بینید این بار تمام آرگومان های فانکشن در میان یک پرانتز قرار گرفته است. در حقیقت متغیر var_arg به یک شیء از نوع تاپل منتسب است که در آموزش های آینده به آن خواهیم پرداخت. اکنون کافی است بدانیم با حذف * از ابتدای شناسه ی پارامتر می توانیم به این شیء دسترسی پیدا کنیم. در دستور سوم بدنه ی فانکشن هم می بینیم که خروجی فانکشن ()len به عنوان آرگومان فانکشن پرینت استفاده شده است. با قرار دادن متغیر var_arg به عنوان آرگومان len می توانیم تعداد آرگومان های وارد شده به فانکشن varArgFunc1 را به دست آوریم.

امکان ورود تعداد متغیری از آرگومان ها به یک فانکشن قابلیت منحصر به فردی را به زبان پایتون می دهد که نظیر آن را در زبان های برنامه نویسی دیگر به ندرت می بینیم. برنامه نویسان پایتون می توانند از این قابلیت استفاده ی زیادی کنند. برای مثال فرض کنید شما می خواهید برنامه ای برای یک فروشگاه بنویسید. در این برنامه تابعی باید نوشته شود که هر روز اجناس انبار فروشگاه را به عنوان ورودی بگیرد و تعداد هر یک از آن ها را یک به یک از پایگاه داده بیرون بکشد و در صورت کمبود گزارشی را به مسئول خرید ارسال کند. با توجه به شرایط، هر روز اجناس متنوعی در فروشگاه فروخته می شوند. مثلاً ممکن است در یک روز صد قلم جنس متفاوت در فروشگاه موجود باشد، اما در هفته ی بعد این تعداد به شصت قلم کاهش پیدا کند. اگر این اپلیکیشن را با زبان برنامه نویسی Python بنویسیم، امکان استفاده از فانکشن هایی با تعداد آرگومان های متفاوت در این زبان قدرتمند کار ما را بسیار آسان خواهد کرد.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمان
سلام چطوری میشه برنامه ای نوشت که یک عدد مینیموم مثل 1370 رو از کاربر بگیره و یک عدد ماکزیموم مثل 1380 رو هم بگیره سپس روزهای سال 1370 تا 1380 رو چاپ کنه؟
کاربر میهمان
کاربر میهمان
میتوانید چگونگی نوشتن این برنامه را به من بگویید؟
برنامهای بنویسید که یک عدد از کاربر دریافت کند و به تعداد آن عدد، اعدادی را از کاربر دریافت کند و ماکزیمم max آن اعداد را چاپ کند.
)برای مثال کاربر اگر 10 وارد کند به این معنی است که میخواهد 10 عدد وارد کند و ماکزیمم max این اعداد را دریافت کند(
2 . برنامهای بنویسید که یک عدد از کاربر دریافت کند و به تعداد آن عدد، اعدادی را از کاربر دریافت کند و مینیمم min آن اعداد را چاپ کند.
)برای مثال کاربر اگر 10 وارد کند به این معنی است که میخواهد 10 عدد وارد کند و مینیمم min این اعداد را دریافت کند(
3 . برنامههای تمرین 1 و 2 را در یک برنامه ادغام کنید و میانگین اعداد وارد شده توسط کاربر را نیز محاسبه کنید. )برای مثال کاربر ابتدا عدد 5 را
وارد میکند و این به این معنی است که کاربر میخواهد 5 عدد وارد کند و بعد از وارد شدن 5 عدد توسط کاربر در انتها برنامه بزرگترین عدد،
کوچکترین عدد و میانگین اعداد را نمایش میدهد(
moohi58
moohi58
a=0
b=int(input())
for i in range(b):
n=int(input())
a=a+n
print(a/b)

در پاسخ به

a.r.j.f
a.r.j.f
def input_adad():
y=0
b=0
print("lotfan 10 adad vared konid")
x=int(input())
b=x
while y<9:
y+=1
x=int(input())
print('x2',x)
if x>b:
b=x
print("b",b)
input_adad()

در پاسخ به

naeimfa
naeimfa
سلام ، خسته نباشید ، چرا وقتی برنامه ی نوشته شده رو ذخیره میکنم بعد اجراش می کنم ، بعد از یک لحظه اجرا ، برنامه بسته میشود ؟ چطوری کاری کنم که صفحه ی اجرا شده بمونه تا خودم ببندمش !
Young_Mind
Young_Mind
به آخر کد هاتون ()input رو اضافه کنید

در پاسخ به

محمدهادی
محمدهادی
روش کلیک راست کن. گزینه دوم (Edit with IDLE) رو بزن تا برنامه توی محیط اسکریپت پایتون باز بشه. بعدش F5 رو بزن تا توی محیط تعاملی اجرا بشه.

در پاسخ به