آموزش آرگومانهای تابع در پایتون
ما میتوانیم اطلاعات را با استفاده از آرگومانها در داخل تابعها، وارد کنیم(پاس دهیم). آرگومانها، (به هنگام صدا زدن نام تابع) پس از نام تابع و در بین پرانتزهای آن مشخص میشوند. ما میتوانیم هر تعداد آرگومان که بخواهیم برای تابع اضافه کنیم، فقط کافیست آنها را با استفاده از علامت کاما، از یکدیگر جدا کنیم. در مثال زیر، یک تابع به همراه یک آرگومان (fname) ایجاد کرده ایم. هنگامی که این تابع صدا زده میشود، یک نام را به آن پاس میدهیم؛ که از آن در درون تابع، برای پرینت کردن نام کامل استفاده میکنیم:
مثال شماره 1
یک تابع با یک آرگومان:
def my_function(fname):
print(fname + " Refsnes")
my_function("Emil")
my_function("Tobias")
my_function("Linus")
نتیجه:
Emil Refsnes
Tobias Refsnes
Linus Refsnes
امتحان کنیددرک تفاوت آرگومان با پارامتر
پارامتر و آرگومان هردو برای انجام یک کار مورد استفاده قرار میگیرند: برای پاس دادن یا وارد کردن اطلاعات به یک تابع. آرگومان و پارامتر از دیدگاه یک تابع به صورت زیر در نظر گرفته میشوند:
- یک پارامتر، به متغیری گفته میشود که در بین پرانتزهای تعریف یک تابع قرار میگیرد.
- یک آرگومان، یک مقدار واقعی است که وقتی نام تابعی را صدا میزنیم، در بین پرانتز قرار میگیرد و به آن تابع ارسال میشود.
مثال شماره 2
def my_function(name): # یک پارامتر است name در اینجا
print("Hello", name)
my_function("Emil") # یک آرگومان است "Emil" در اینجا
تعداد آرگومان ها
به طور پیشفرض، وقتی میخواهیم نام یک تابع را صدا بزنیم تا اجرا شود، باید به تعداد لازم، به آن آرگومان بدهیم. اگر تابع شما 2 آرگومان قبول میکند، باید وقتی که میخواهیم آن را صدا بزنیم، دقیقاً 2 آرگومان به آن اختصاص دهیم.
مثال شماره 3
این تابع منتظر دو آرگومان است و ما به آن، دو آرگومان اختصاص میدهیم:
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil", "Refsnes")
نتیجه:
Emil Refsnes
امتحان کنیداگر سعی کنیم یک تابع را صدا بزنیم ولی تعداد آرگومانهای درستی به آن ندهیم، با یک خطا مواجه خواهیم شد:
مثال شماره 4
باید به این تابع، دو آرگومان اختصاص دهیم اما تنها یک آرگومان برای آن در نظر گرفتهایم:
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Emil")
نتیجه:
Traceback (most recent call last):
File "demo_function_arg_error.py", line 4, in <module>
my_function("Emil")
TypeError: my_function() missing 1 required positional argument: 'lname'
امتحان کنیدمقادیر پیشفرض برای پارامترهای تابع
ما میتوانیم برای پارامترهای یک تابع، مقادیر پیشفرضی را مشخص کنیم. تا اگر این تابع، بدون اختصاص آرگومان، صدا زده شود، از این مقادیر پیشفرض استفاده کند:
مثال شماره 5
def my_function(name = "friend"):
print("Hello", name)
my_function("Emil")
my_function("Tobias")
my_function()
my_function("Linus")
نتیجه:
Hello Emil
Hello Tobias
Hello friend
Hello Linus
امتحان کنیدمثال شماره 6
استفاده از مقدار پیش فرض برای پارامتر country:
def my_function(country = "Norway"):
print("I am from", country)
my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
نتیجه:
I am from Sweden
I am from India
I am from Norway
I am from Brazil
امتحان کنیداختصاص آرگومانها به صورت کلمهی کلیدی(Keyword Arguments)
ما میتوانیم آرگومانها را به صورت key = value ارسال کنیم.
مثال شماره 7
def my_function(animal, name):
print("I have a", animal)
print("My", animal + "'s name is", name)
my_function(animal = "dog", name = "Buddy")
نتیجه:
I have a dog
My dog's name is Buddy
امتحان کنیددر این روش، دیگر ترتیب قرارگیری آرگومانها اهمیتی ندارد.
مثال شماره 8
def my_function(animal, name):
print("I have a", animal)
print("My", animal + "'s name is", name)
my_function(name = "Buddy", animal = "dog")
نتیجه:
I have a dog
My dog's name is Buddy
امتحان کنیدنکته: در مستندات پایتون، برای مخفف عبارت Keyword Arguments از کلمهی خلاصه شدهی kwargs استفاده میشود.
استفاده از آرگومانهای موقعیتدار در پایتون
وقتی که یک تابع را با آرگومانهایش، بدون استفاده از کلمههای کلیدی(keywords) صدا بزنیم، به آنها آرگومانهای موقعیتدار گفته میشود. آرگومانهای موقعیتدار، باید به ترتیب صحیحی قرار گیرند.
مثال شماره 9
def my_function(animal, name):
print("I have a", animal)
print("My", animal + "'s name is", name)
my_function("dog", "Buddy")
نتیجه:
I have a dog
My dog's name is Buddy
امتحان کنیدترتیب در آرگومانهای موقعیتی اهمیت دارد:
مثال شماره 10
جا به جا کردن ترتیبِ آرگومانها، نتیجه را تغییر میدهد:
def my_function(animal, name):
print("I have a", animal)
print("My", animal + "'s name is", name)
my_function("Buddy", "dog")
نتیجه:
I have a Buddy
My Buddy's name is dog
امتحان کنیدترکیب آرگومانهای موقعیتدار و کلمههای کلیدی
ما میتوانیم در صدا زدن یک تابع، آرگومانهای موقعیتدار(positional) و آرگومانهای کلمهی کلیدی(keyword) را با یکدیگر ترکیب کنیم. اما آرگومانهای موقعیتدار، باید قبل از آرگومانهای کلمهی کلیدی قرار گیرند:
مثال شماره 11
def my_function(animal, name, age):
print("I have a", age, "year old", animal, "named", name)
my_function("dog", name = "Buddy", age = 5)
نتیجه:
I have a 5 year old dog named Buddy
امتحان کنیدپاس دادن نوعهای دادهی مختلف
ما میتوانیم هر نوعِ داده ای(data type) را بعنوان یک آرگومان به یک تابع بدهیم(از قبیل رشته، عدد، لیست، دیکشنری و غیره). این نوعِ داده، در درون تابع حفظ میشود:
مثال شماره 12
ارسال یک لیست بعنوان یک آرگومان:
def my_function(fruits):
for fruit in fruits:
print(fruit)
my_fruits = ["apple", "banana", "cherry"]
my_function(my_fruits)
نتیجه:
apple
banana
cherry
امتحان کنید
مثال شماره 13
ارسال یک دیکشنری بعنوان یک آرگومان:
def my_function(person):
print("Name:", person["name"])
print("Age:", person["age"])
my_person = {"name": "Emil", "age": 25}
my_function(my_person)
نتیجه:
Name: Emil
Age: 25
امتحان کنیدبرگرداندن مقادیر(Return Values)
با استفاده از دستور return در یک تابع، میتوانیم مقادیر و نتایج را به بیرون از آن، برگردانیم:
مثال شماره 14
def my_function(x, y):
return x + y
result = my_function(5, 3)
print(result)
نتیجه:
8
امتحان کنیدبرگرداندن(return کردن) نوعهای دادهی متفاوت
تابعها میتوانند هر نوعِ دادهای را برگردانند(return کنند)؛ که شامل لیستها، تاپلها، دیکشنریها و موارد دیگر میشود.
مثال شماره 15
یک تابع که یک لیست را برمیگرداند:
def my_function():
return ["apple", "banana", "cherry"]
fruits = my_function()
print(fruits[0])
print(fruits[1])
print(fruits[2])
نتیجه:
apple
banana
cherry
امتحان کنیدمثال شماره 16
یک تابع که یک تاپل را برمیگرداند:
def my_function():
return (10, 20)
x, y = my_function()
print("x:", x)
print("y:", y)
نتیجه:
x: 10
y: 20
امتحان کنیدآرگومانهایی که فقط موقعیتدار هستند(Positional-Only)
ما میتوانیم مشخص کنیم که یک تابع، بتواند فقط از آرگومانهای موقعیتدار استفاده کند. برای مشخص کردن آرگومانهای فقط-موقعیتدار، از , / پس از پارامترها استفاده کنید:
مثال شماره 17
def my_function(name, /):
print("Hello", name)
my_function("Emil")
نتیجه:
Hello Emil
امتحان کنیدبدون استفاده از , / ما درواقع اجازه دادهایم تا از آرگومانهای کلمهی کلیدی(keyword arguments) استفاده شود، حتی اگر این تابع به انتظار آرگومانهای موقعیتدار باشد:
مثال شماره 18
def my_function(name):
print("Hello", name)
my_function(name = "Emil")
نتیجه:
Hello Emil
امتحان کنیدبا استفاده از , / اگر سعی کنیم از آرگومانهای کلمهی کلیدی(keyword arguments) استفاده کنیم، یک خطا دریافت خواهیم کرد:
مثال شماره 19
def my_function(name, /):
print("Hello", name)
#این دستور یک خطا ایجاد خواهد کرد:
my_function(name = "Emil")
نتیجه:
Traceback (most recent call last):
File "./prog.py", line 5, in <module>
TypeError: my_function() got some positional-only arguments passed as keyword arguments: 'name'
امتحان کنیدآرگومانهایی که فقط به صورت کلمهی کلیدی هستند(only keyword arguments)
برای اینکه مشخص کنیم که یک تابع بتواند فقط از آرگومانهای کلمهی کلیدی(keyword arguments) استفاده کند، باید از یک *, قبل از پارامترها استفاده کنیم:
مثال شماره 20
def my_function(*, name):
print("Hello", name)
my_function(name = "Emil")
نتیجه:
Hello Emil
امتحان کنیدبدون استفاده از *, درواقع اجازه دادهایم تا از آرگومانهای موقعیتدار استفاده شود؛ حتی اگر این تابع، انتظار یک آرگومانِ کلمهی کلیدی داشته باشد:
مثال شماره 21
def my_function(name):
print("Hello", name)
my_function("Emil")
نتیجه:
Hello Emil
امتحان کنیدبا استفاده از *, اگر سعی کنیم از آرگومانهای موقعیتدار(positional arguments) استفاده کنیم، یک خطا ایجاد خواهد شد:
مثال شماره 22
def my_function(*, name):
print("Hello", name)
my_function("Emil")
نتیجه:
Traceback (most recent call last):
File "./prog.py", line 4, in <module>
TypeError: my_function() takes 0 positional arguments but 1 was given
امتحان کنیدترکیب آرگومانهای فقطموقعیتدار(Positional-Only) و آرگومانهای فقطکلمهیکلیدی(Keyword-Only)
ما میتوانیم هر دو نوع آرگومان را، در یک تابع با یکدیگر ترکیب کنیم. پارامترهایی که قبل از / قرار دارند، پارامترهای فقطموقعیتدار هستند و پارامترهایی که پس از * قرار دارند، پارامترهای فقطکلمهیکلیدی هستند:
نکته: در سایت W3schools در عبارت بالا، به جای پارامتر، از آرگومان استفاده شده است اما دقیق تر این است که از کلمه ی پارامتر استفاده کنیم.
مثال شماره 23
def my_function(a, b, /, *, c, d):
return a + b + c + d
result = my_function(5, 10, c = 15, d = 20)
print(result)
نتیجه:
50
امتحان کنید
منبع: www.w3schools.com/python
- بازدید: 42
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.