سرگرمی با *args و **kwargs
من یک بار با یک پایتونیستای هوشمند برنامهریزی کردم که فریاد میزد با پارامترهای اختیاری یا کلمه کلیدی. در غیر این صورت خیلی با هم کنار آمدیم. من حدس میزنم این همان کاری است که برنامهنویسی در دانشگاه با مردم در نهایت انجام میدهد. در حال حاضر، در حالی که به راحتی مورد تمسخر قرار می گیرند، پارامترهای *args و **kwargs به هر حال یک ویژگی بسیار مفید در پایتون نیستند. و درک آنها potency شما را به یک توسعه دهنده موثرتر تبدیل می کند. بنابراین پارامترهای *args و **kwargs برای چه استفاده می شوند؟ اجازه می دهند الف تابعی برای پذیرش آرگومان های اختیاری است، بنابراین می توانید API های انعطاف پذیر ایجاد کنید در ماژول ها و کلاس های شما:def foo(required, *args, **kwargs): “ارگ!” و “کوارگ!” هر بار که او یک تعریف تابع را تایپ کرد if args: print(required) print(args) print(kwargs)تابع فوق حداقل به یک آرگومان به نام “نیاز” نیاز دارد. if kwargs: اما می تواند آرگومان های موقعیتی و کلید واژه اضافی را نیز بپذیرد. اگر تابع را با آرگومان های اضافی فراخوانی کنیم، آرگ ها جمع می شوند آرگومان های موقعیتی اضافی به عنوان یک تاپل به دلیل نام پارامتر به همین ترتیب، kwargs آرگومان های کلیدواژه اضافی را به عنوان یک فرهنگ لغت جمع آوری می کند زیرا نام پارامتر دارای پیشوند ** است. دارای پیشوند * است. اگر هیچ آرگومان اضافی ارسال نشود، هر دو آرگ و کوارگ می توانند خالی باشند همانطور که ما تابع را با ترکیب های مختلفی از آرگومان ها فراخوانی می کنیم، شما این کار را خواهید کرد ببینید پایتون چگونه آنها را در پارامترهای args و kwargs جمع آوری می کندبا توجه به اینکه آیا آنها آرگومان های موقعیتی یا کلیدواژه هستند:>>> foo() به تابع. TypeError: >>> foo(‘hello’) “foo() missing 1 required positional arg: ‘required'” >>> foo(‘hello’, 1, 2, 3) hello (1, 2, 3) hello >>> foo(‘hello’, 1, 2, 3, key1=’value’, key2=999) (1, 2, 3) hello {‘key1’: ‘value’, ‘key2’: 999}من می خواهم روشن کنم که فراخوانی پارامترها args و kwargs است همچنین اگر آنها را *parms و **argv نامیدید. نحو واقعی است فقط ستاره (*) یا دو ستاره (**)، به ترتیب. به سادگی یک قرارداد نامگذاری مثال قبلی فقط کار می کند با این حال، توصیه میکنم برای جلوگیری از سردرگمی، به کنوانسیون نامگذاری پذیرفته شده پایبند باشید. (و برای اینکه فرصتی برای فریاد زدن “ارغ!” و “کوارگ!” هرچند وقت یکبار.)امکان انتقال پارامترهای اختیاری یا کلیدواژه از یک تابع به عملکرد دیگر وجود دارد. هنگام فراخوانی تابعی که میخواهید آرگومانها را به آن فوروارد کنید، میتوانید این کار را با استفاده از عملگرهای بازگشایی آرگومان * و ** انجام دهید.ارسال آرگومان های اختیاری یا کلیدواژه
قوانین ارسال دیدگاه در سایت