با سلام،میشه لطفا در مورد ارگومان های کلیدی توضیح دهید؟چی هستند و چرا ما در برنامه نویسی از ان ها استفاده می کنیم؟ایا در زیان های برنامه نویسی دیگر به غیر از پایتون هم وجود دارند؟
با تشکر و احترام.
Printable View
با سلام،میشه لطفا در مورد ارگومان های کلیدی توضیح دهید؟چی هستند و چرا ما در برنامه نویسی از ان ها استفاده می کنیم؟ایا در زیان های برنامه نویسی دیگر به غیر از پایتون هم وجود دارند؟
با تشکر و احترام.
با سلام
امیدوارم منظورتون Keyword Arguments باشه
توابع می تونن در پایتون ( و یا بیشتر زبون ها ) متغییرهاشون رو بصورت StudentClass = "a" یا keyword = value تعریف کنن
مثلا :
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
print "-- This parrot wouldn't", action,
print "if you put", voltage, "Volts through it."
print "-- Lovely plumage, the", type
print "-- It's", state, "!"
تابع بالا به صورت های مختلف زیر قابل فراخونی هست :
parrot(1000)
parrot(action = 'VOOOOOM', voltage = 1000000)
parrot('a thousand', state = 'pushing up the daisies')
parrot('a million', 'bereft of life', 'jump')
و فراخونی های زیر غیر قابل پذیرش هستند :
parrot() # required argument missing
parrot(voltage=5.0, 'dead') # non-keyword argument following keyword
parrot(110, voltage=220) # duplicate value for argument
parrot(actor='John Cleese') # unknown keyword
از اینکه وقتتون رو در اختیار گذاشتید و اینقدر با حوصله جواب دادید،تشکر می کنم.بله منظورم همان Keyword Arguments بود،اما سوالی که خیلی ذهنم را درگیر کرده،اینه که چرا ما از این ارگومان های کلیدی در برنامه نویسی استفاده می کنیم؟در ضمن،فرق بین Positional Arguments و Keyword Arguments چیست؟.
با تشکر و احترام.
کسی نبود؟.........
positional argument نوعی از آرگیومنت است که بدون مقدار پیش فرض و = تعریف شده است
keyword argument نوعی از آرگیومنت بود که با مقدار پیش فرض تعریف میشد
def rectangleArea(width, height):
return width * height
print rectangleArea(1, 2)
print rectangleArea(width=1, height=2)
print rectangleArea(height=2, width=1)
Positional Argument می تونه با نام مقدار گذاری بشه ، یعنی هر وقت هرجایی تو تابع که دلت خواست می تونی ازش استفاده کنی به این شرط که اسمش کنارش باشه ، مثل مثال بالا
حالا این مثال رو توجه بفرما
def func(*args, **kwargs): ----> args: positional kwargs:keyword
res = calc(1, 3, spam="eggs") ----> 1, 3: positional spam="eggs": keyword
به کامنت های روبروش توجه بفرمایید
حالا یه مثال دیگه :
def foo(*positional, **keywords):
print "Positional:", positional
print "Keywords:", keywords
>>> foo('one', 'two', 'three')
Positional: ('one', 'two', 'three')
Keywords: {}
>>> foo(a='one', b='two', c='three')
Positional: ()
Keywords: {'a': 'one', 'c': 'three', 'b': 'two'}
>>> foo('one','two',c='three',d='four')
Positional: ('one', 'two')
Keywords: {'c': 'three', 'd': 'four'}
[QUOTE=Bahmany;2058604]positional argument
keyword argument نوعی از آرگیومنت بود که با مقدار پیش فرض تعریف میشد.
ببخشید اگر اینطور هست،پس Keyword Argument چه فرقی با Default Argument Values داره؟Default Argument Values ها با مقدار پیش فرض در زمان تعریف تابع،معین می شوند.با تشکر از صبر و حوصله شما.
من معذرت میخوام اما خودم هم گیج شده بودم.پس در واقع ارگومان کلیدی شیوه ای برای فراخوان کردن تابع هست،درست نمی گم؟
خیلی ممنونم.فقط یک سوال دیگه که اخرین هم هست و زیاد وقتتون رو نمی گیرم و سرتون رو هم درد نمیارم.البته از اونجا که در مراجع فارسی در مورد این جور چیز ها زیاد توضیح داده نشده از جهتی فکر می کنم جواب این سوال ها برای کسانی که مثل من به دنبال پاسخ هستند،بسیار سودمند باشه.VarArgs ها چی هستند و به چه درد می خورند؟اگر هم باید تاپیک دیگری برای این سوال ایجاد کنم،لطفا بگویید.با تشکر از راهنمایی و صبر و حوصله شما.با احترام.
خواهشم میکنم ، بحث جالبیه
در جاوا کد دستور زیر رو توجه بفرمایید :
String.format("This is an integer: %d", myInt);
String.format("This is an integer: %d and a string: %s", myInt, myString);
توجه بفرمایید در تابع بالا یک متغیر رشته ای وجود دارد و بعد از آن تعداد نامعلومی متغیر که قرار است در محل های مشخص شده در متغیر رشته ای جاگذاری بشوند
البته این مثال برای جاوا بود
در الگوی جاری فراخوانی تابع در پایتون ، پایتون به آرگیومنت ها اجازه میده تا به دو صورت Positional یا Keyword فراخوانی بشن. در نتیجه یه آرگیومنت می تونه بطور صریح تو یه سری نام تعریف بشه و یا بصورت محل قرارگیری ( Positional ) یا تلویحی ( که در مثال های بالا بهش پرداخته شده )
در اینجا امکان داره شرایطی پیش بیاد که یک تابع تعداد متغیری از آرگیومنت ها رو بکار بگیره. زبان پایتون با پشتیبانی از varargs با سینتکس ('*varname') تمامی آرگیومنت های سمت چپ یک تابع رو به این متغیر اختصاص میده
در اینجا نکته ای که وجود داره اینکه تمام آرگیومنت های معمول تعریف شده در یک تابع قبل از رسیدن به varargs باید فراخونی بشن. این داستان همیشه مورد پسند برنامه نویس نیست.
def sortwords(case_sensitive=False*,wordlist):
...
حالا از همه ی این بحث ها به کدهای زیر هم نگاهی بشه خالی از لطف نیست :
>>> def f(x,y,z):
... print(x,y,z)
...
>>> p = (47,11,12)
>>> f(*p)
(47, 11, 12)
>>> f(p[0],p[1],p[2])
(47, 11, 12)
>>>
def arithmetic_mean(x, *l):
""" The function calculates the arithmetic mean of a non-empty
arbitrary number of numbers """
sum = x
for i in l:
sum += i
return sum / (1.0 + len(l))
>>> from statistics import arithmetic_mean
>>> arithmetic_mean(4,7,9)
6.666666666666667
>>> arithmetic_mean(4,7,9,45,-3.7,99)
26.71666666666667
>>> l = [4,7,9,45,-3.7,99]
>>> arithmetic_mean(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "statistics.py", line 8, in arithmetic_mean
return sum / (1.0 + len(l))
TypeError: unsupported operand type(s) for /: 'list' and 'float'
>>> arithmetic_mean(*l)
26.71666666666667
>>>
>>> def f(**args):
... print(args)
...
>>> f()
{}
>>> f(de="Germnan",en="English",fr="French")
{'fr': 'French', 'de': 'Germnan', 'en': 'English'}
>>>
>>> def f(a,b,x,y):
... print(a,b,x,y)
...
>>> d = {'a':'append', 'b':'block','x':'extract','y':'yes'}
>>> f(**d)
('append', 'block', 'extract', 'yes')
>>> t = (47,11)
>>> d = {'x':'extract','y':'yes'}
>>> f(*t, **d)
(47, 11, 'extract', 'yes')
>>>