از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
آرگومان های پیش فرض در توابع پایتون
سرفصلهای مطلب
از توابع در پایتون برای پیاده سازی منطقی استفاده می شود که می خواهید به طور مکرر در مکان های مختلف کد خود اجرا کنید. شما می توانید داده ها را از طریق آرگومان های تابع به این توابع ارسال کنید. علاوه بر ارسال آرگومان ها به توابع از طریق فراخوانی تابع، می توانید مقادیر آرگومان پیش فرض را در توابع پایتون نیز تنظیم کنید. این مقادیر پیشفرض به آرگومانهای تابع اختصاص داده میشوند اگر بهصراحت یک مقدار پارامتر را به آرگومان دادهشده ارسال نکنید. پارامترها مقادیری هستند که در واقع به آرگومان های تابع ارسال می شوند.
در این مقاله روش استفاده از آرگومان های پیش فرض در توابع پایتون را خواهید دید. اما ابتدا روش تعریف یک تابع در پایتون و روش انتقال صریح مقادیر به آرگومان های تابع را خواهیم دید.
عملکرد بدون آرگومان
بیایید یک تابع بسیار ساده پایتون را بدون هیچ آرگومان تعریف کنیم:
def my_function():
print("This is a function without arguments")
اسکریپت بالا یک تابع را تعریف می کند، my_function
، که هیچ آرگومانی را نمی پذیرد و به سادگی یک رشته را چاپ می کند.
اسکریپت زیر نشان می دهد که در واقع چگونه می خواهید آن را فراخوانی کنید my_function()
تابع:
my_function()
در خروجی، باید یک عبارت ساده را مشاهده کنید که بر روی صفحه نمایش چاپ شده است my_function()
تابع:
This is a function without arguments
عملکرد با آرگومان های صریح
اکنون یک تابع ساده پایتون تعریف می کنیم که در آن باید چندین مقدار را برای آرگومان های تابع ارسال کنیم. اگر مقادیری را برای همه آرگومان های تابع مشخص نکنید، یک خطا مشاهده خواهید کرد.
در اینجا تابعی است که به عنوان مثال از آن استفاده خواهیم کرد:
def func_args(integer1, integer2):
result = integer1 + integer2
return result
در کد بالا یک تابع ایجاد می کنیم، func_args()
، با دو استدلال integer1
و integer2
. تابع مقادیر ارسال شده در دو آرگومان را اضافه می کند و نتیجه را به فراخوان دهنده تابع برمی گرداند.
بیایید سعی کنیم تابع بالا را با دو آرگومان فراخوانی کنیم:
result = func_args(10, 20)
print(result)
اسکریپت بالا را فراخوانی می کند func_args()
روش با دو مقدار پارامتر یعنی 10 و 20 در خروجی باید مجموع این دو مقدار یعنی 30 را مشاهده کنید.
بیایید اکنون سعی کنیم با آن تماس بگیریم func_args()
متد بدون ارسال مقادیر برای آرگومان ها:
result = func_args()
print(result)
در خروجی باید خطای زیر را مشاهده کنید:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-13-3449c8e5e188> in <module>
----> 1 result = func_args()
2 print(result)
TypeError: func_args() missing 2 required positional arguments: 'integer1' and 'integer2'
خطا کاملا واضح است، فراخوانی تابع به func_args()
2 آرگومان موقعیتی مورد نیاز را از دست داده است، integer1
و integer2
. خطا اساساً به ما می گوید که باید مقادیری را برای the ارسال کنیم integer1
و integer2
آرگومان ها از طریق فراخوانی تابع.
بیایید اکنون یک مقدار برای یکی از آرگومان ها ارسال کنیم و ببینیم چه اتفاقی می افتد:
result = func_args(10)
print(result)
اکنون در خروجی، دوباره باید خطای زیر را مشاهده کنید:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-640ec7b786e1> in <module>
----> 1 result = func_args(10)
2 print(result)
TypeError: func_args() missing 1 required positional argument: 'integer2'
تفاوت در اینجا این است که خطا اکنون به ما می گوید که مقدار for یکی از استدلال های موضعی، به عنوان مثال integer2
، گم شده است. این بدان معناست که بدون تنظیم مقادیر آرگومان پیشفرض، باید مقادیر را به صراحت برای آن ارسال کنید همه آرگومان های تابع، در غیر این صورت یک خطا پرتاب می شود.
اگر بخواهید تابع شما با یا بدون مقادیر آرگومان در فراخوانی تابع اجرا شود چه؟ اینجا جایی است که آرگومان های پیش فرض در توابع پایتون وارد بازی می شوند.
تابع با آرگومان های پیش فرض
آرگومانهای پیشفرض در توابع پایتون آرگومانهایی هستند که مقادیر پیشفرض را میگیرند، اگر هیچ مقدار صریحی از فراخوانی تابع به این آرگومانها ارسال نشود. بیایید یک تابع را با یک آرگومان پیش فرض تعریف کنیم.
def find_square(integer1=2):
result = integer1 * integer1
return result
اسکریپت بالا یک تابع را تعریف می کند find_square()
با یک آرگومان پیش فرض یعنی integer1
. مقدار پیش فرض برای integer1
آرگومان روی 2 تنظیم شده است find_square()
روش با مقدار برای integer1
استدلال، find_square()
تابع مربع آن مقدار را برمی گرداند.
در غیر این صورت، اگر هیچ مقداری برای integer1
استدلال از find_square()
تابع، خواهید دید که مقدار پیش فرض یعنی 2 به آن اختصاص داده می شود integer1
و تابع مربع 2 یعنی 4 را برمی گرداند.
بیایید ابتدا با آن تماس بگیریم find_square()
روش با مقدار آرگومان 10:
result = find_square(10)
print(result)
خروجی:
100
هنگامی که اسکریپت بالا را اجرا می کنید، مقدار 10 مقدار پیش فرض 2 را برای آرگومان بازنویسی می کند. integer1
از find_square()
تابع و تابع 100 را برمی گرداند که مربع 10 است.
در حال حاضر ما تماس بگیرید find_square()
تابع بدون هیچ مقداری برای argument1
بحث و جدل. در این صورت خواهید دید که 4 توسط برگردانده می شود find_square()
تابع از آنجایی که در غیاب مقدار برای find_square()
تابع، مقدار پیش فرض 2 به عنوان مقدار برای استفاده می شود find_square()
عملکرد، همانطور که در زیر نشان داده شده است:
result = find_square()
print(result)
خروجی:
4
یک تابع پایتون می تواند چندین آرگومان پیش فرض نیز داشته باشد. به عنوان مثال، در اسکریپت زیر، تابع اعداد صحیح ارسال شده به آرگومان ها را اضافه می کند. اگر هیچ یک از مقادیر صحیح به تابع ارسال نشود، آرگومان های پیش فرض به ترتیب مقادیر 2 و 4 را می گیرند، همانطور که در زیر نشان داده شده است:
def add_ints(integer1=2, integer2=4):
result = integer1 + integer2
return result
بیایید ابتدا با آن تماس بگیریم add_ints()
عملکرد بدون هیچ پارامتر:
result = add_ints()
print(result)
خروجی:
6
از آنجایی که هیچ مقداری برای آرگومان های تابع ارسال نکردیم، مقادیر آرگومان پیش فرض یعنی 2 و 4 با هم جمع شده اند.
بیایید اکنون دو تا از ارزش های خود را به آن منتقل کنیم add_ints()
تابع:
result = add_ints(4, 8)
print(result)
خروجی:
12
همانطور که انتظار می رفت، 4 و 8 با هم جمع شدند تا 12 برگردد.
یک تابع پایتون میتواند همزمان آرگومانهای عادی (صریح) و پیشفرض داشته باشد. بیایید یک تابع ایجاد کنیم take_power()
. آرگومان اول تابع یک آرگومان عادی است در حالی که آرگومان دوم یک آرگومان پیش فرض با مقدار 2 است. تابع نتیجه مقدار آرگومان اول را به توان مقدار در آرگومان دوم برمی گرداند.
def take_power(integer1, integer2=2):
result = 1
for i in range(integer2):
result = result * integer1
return result
بیایید ابتدا فقط یک آرگومان واحد را پاس کنیم:
result = take_power(3)
print(result)
خروجی:
9
در اسکریپت بالا، 3 به عنوان یک مقدار به the ارسال شده است integer1
استدلال از take_power()
تابع. هیچ مقداری برای آرگومان پیش فرض ارائه نشده است integer2
. از این رو، مقدار پیش فرض 2 برای گرفتن توان 3 استفاده می شود و در خروجی عدد 9 را مشاهده خواهید کرد.
حالا بیایید دو مقدار را به the ارسال کنیم take_power()
تابع.
result = take_power(3, 4)
print(result)
در خروجی 3 را به توان چهارم یعنی 81 می بینید.
توجه به این نکته مهم است که پارامترهایی با آرگومان های پیش فرض پارامترهای بدون آرگومان پیش فرض نمی توانند دنبال شوند. برای مثال تابع زیر را در نظر بگیرید:
def take_power(integer1=2, integer2):
result = 1
for i in range(integer2):
result = result * integer1
return result
تلاش برای فراخوانی این تابع منجر به خطا می شود زیرا آرگومان اول پیش فرض دارد، اما آرگومان دوم اینطور نیست:
result = take_power(3, 4)
print(result)
اجرای این کد باعث خطای زیر می شود:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-640ec7b786e1> in <module>
----> 1 def take_power(integer1=3, integer2):
2 result = 1
SyntaxError: non-default argument follows default argument
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-17 23:06:05