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


در تمامی فانکشن‌هایی که تاکنون در مثال‌های آموزشی این دوره تعریف کرده‌ایم، تعداد پارامترهای ورودی از همان ابتدا ثابت و مشخص بود که در اکثر موارد نیز تعریف فانکشن در این زبان بدین روش انجام می‌شود و نیاز به توضیح نیست که رفع ارورهای احتمالی در چنین شرایطی به مراتب آسان‌تر می‌گردد اما این در حالی است که گاهی نمی‌توان تعداد پارامترهای ورودی یک فانکشن را در هنگام تعریف آن مشخص کرد که برای مثال برخی فانکشن‌های Built-in از جمله فانکشن ()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 تعریف کرده و یک پارامتر ورودی به نام var_arg به آن داده‌ایم که با قرار دادن کاراکتر * در کنار شناسۀ این پارامتر گفته‌ایم که فراخوانی فانکشن مذکور با دریافت تعداد آرگومان‌های ورودی دلخواه امکان‌پذیر می‌باشد و در ادامه این فانکشن را با یکسری آرگومان متفاوت فراخوانی کرده‌ایم سپس اسکریپت برنامۀ فوق را در فایلی به نام varArgFunc.py ذخیره کرده و آن را اجرا می‌کنیم که در نهایت خروجی حاصل به صورت زیر خواهد بود:

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

Sokan Academy
1 2 3 4 5
9 Nine

 *** 
 * * 
 ***

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

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

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

حال برنامۀ مربوط به مثال قبل را اندکی تغییر داده و فانکشنی تحت عنوان ()varArgFunc1 را به صورت زیر پیاده‌سازی می‌کنیم:

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

در کد فوق فانکشنی به نام ()varArgFunc1 تعریف کرده‌ایم که با ذکر کاراکتر * در کنار پارامتر ورودی آن می‌توانیم فانکشن مذکور را با تعداد آرگومان‌های ورودی متفاوت فراخوانی کنیم و در داخل این فانکشن گفته‌ایم در صورت فراخوانی، ابتدا آرگومان‌های ورودی به ترتیب و با یک فاصله از هم چاپ شوند و در ادامه مشابه دستور اول عمل کرده‌ایم با این تفاوت که کاراکتر * را از ابتدای شناسۀ پارامتر ورودی حذف کرده‌ایم که منجر بدین خواهد شد تا متغیر var_arg به آبجکتی از نوع Tuple منتسب شده است که در آموزش‌های آینده به آن خواهیم پرداخت اما در حال حاضر کافی است بدانیم که با حذف * از ابتدای شناسۀ پارامتر می‌توانیم به این آبجکت دسترسی پیدا کنیم که دستور ()print نیز منجر به چاپ آبجکت مذکور در خروجی خواهد شد.

در سطر بعد از بدنۀ فانکشن هم خروجی فانکشن ()len را به عنوان آرگومان ورودی به فانکشن ()print داده‌ایم که بدین ترتیب ()len تعداد آرگومان‌های ورودی به فانکشن ()varArgFunc1 را محاسبه کرده و خروجی را برای چاپ به فانکشن ()print می‌دهد و در نهایت فانکشن مذکور را با سه پارامتر ورودی فوق فراخوانی کرده‌ایم که خروجی حاصل از این فراخوانی به صورت زیر خواهد بود:

1 2 3
(1, 2, 3)
3

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

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

حال با توجه به اینکه هر روز اجناس متنوعی در فروشگاه فروخته می‌شوند و مثلاً ممکن است در یک روز صد قلم جنس متفاوت در فروشگاه موجود باشد اما هفتۀ بعد این تعداد به شصت قلم کاهش پیدا کند، در این صورت اگر اپلیکیشن مذکور با زبان برنامه‌نویسی پایتون پیاده‌سازی شود امکان استفاده از فانکشن‌هایی با تعداد آرگومان‌های ورودی منجر به تسهیل توسعۀ آن خواهد شد.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
علیرضامن یک کاربر مهمان هستم
۱۳۹۵/۰۹/۱۷
میتوانید چگونگی نوشتن این برنامه را به من بگویید؟
برنامهای بنویسید که یک عدد از کاربر دریافت کند و به تعداد آن عدد، اعدادی را از کاربر دریافت کند و ماکزیمم max آن اعداد را چاپ کند.
)برای مثال کاربر اگر 10 وارد کند به این معنی است که میخواهد 10 عدد وارد کند و ماکزیمم max این اعداد را دریافت کند(
2 . برنامهای بنویسید که یک عدد از کاربر دریافت کند و به تعداد آن عدد، اعدادی را از کاربر دریافت کند و مینیمم min آن اعداد را چاپ کند.
)برای مثال کاربر اگر 10 وارد کند به این معنی است که میخواهد 10 عدد وارد کند و مینیمم min این اعداد را دریافت کند(
3 . برنامههای تمرین 1 و 2 را در یک برنامه ادغام کنید و میانگین اعداد وارد شده توسط کاربر را نیز محاسبه کنید. )برای مثال کاربر ابتدا عدد 5 را
وارد میکند و این به این معنی است که کاربر میخواهد 5 عدد وارد کند و بعد از وارد شدن 5 عدد توسط کاربر در انتها برنامه بزرگترین عدد،
کوچکترین عدد و میانگین اعداد را نمایش میدهد(
naeimfa
naeimfa
۱۳۹۵/۰۶/۰۷
سلام ، خسته نباشید ، چرا وقتی برنامه ی نوشته شده رو ذخیره میکنم بعد اجراش می کنم ، بعد از یک لحظه اجرا ، برنامه بسته میشود ؟ چطوری کاری کنم که صفحه ی اجرا شده بمونه تا خودم ببندمش !