4- ابزارهای کنترل بیشتر کنترل بیشتر

ساخت وبلاگ

علاوه بر این که بیانیه ای که تازه معرفی شده است ، پایتون از اظهارات کنترل جریان معمول شناخته شده از زبان های دیگر ، با برخی پیچش ها استفاده می کند.

4. 1اگر اظهارات

شاید مشهورترین نوع بیانیه عبارت IF باشد. مثلا:

قطعات elif صفر یا بیشتر وجود دارد و قسمت دیگر اختیاری است. کلمه کلیدی "elif" برای "other if" کوتاه است ، و برای جلوگیری از تورفتگی بیش از حد مفید است. If… Elif… Elif… توالی جایگزینی برای سوئیچ یا اظهارات موردی است که به زبانهای دیگر یافت می شود.

اگر شما همان مقدار را با چندین ثابت مقایسه می کنید ، یا انواع یا ویژگی های خاص را بررسی می کنید ، ممکن است عبارت Match را نیز مفید بدانید. برای اطلاعات بیشتر به بیانیه های مسابقه مراجعه کنید.

4. 2برای اظهارات

بیانیه در پایتون کمی با آنچه ممکن است در C یا Pascal استفاده کنید متفاوت است. به جای اینکه همیشه بیش از یک پیشرفت حسابی از اعداد (مانند پاسکال) تکرار شود ، یا به کاربر امکان تعریف هر دو مرحله تکرار و شرایط متوقف کردن (به عنوان C) را می دهد ، پایتون برای بیانیه در مورد موارد هر دنباله تکرار می شود (یک لیست یایک رشته) ، به ترتیب که در دنباله ظاهر می شوند. به عنوان مثال (بدون هدف در نظر گرفته شده):

کدی که یک مجموعه را اصلاح می کند در حالی که در همان مجموعه تکرار می شود ، می تواند به درستی مناسب باشد. درعوض ، معمولاً مستقیم تر از یک نسخه از مجموعه یا ایجاد یک مجموعه جدید ، به جلو تر است:

4. 3دامنه () عملکرد

اگر نیاز به تکرار بیش از یک دنباله از اعداد دارید ، محدوده عملکرد داخلی () مفید است. این پیشرفت های حسابی را ایجاد می کند:

نقطه پایان داده شده هرگز بخشی از دنباله تولید شده نیست. دامنه (10) 10 مقدار ، شاخص های حقوقی برای مواردی از دنباله طول 10 ایجاد می کند. می توان اجازه داد محدوده در یک عدد دیگر شروع شود ، یا یک افزایش متفاوت را مشخص کند (حتی منفی ؛ گاهی اوقات این "مرحله" نامیده می شود):

برای تکرار بیش از شاخص های یک دنباله ، می توانید دامنه () و لن () را به شرح زیر ترکیب کنید:

با این حال ، در بیشتر موارد ، استفاده از عملکرد شمارش () راحت است ، به تکنیک های حلقه ای مراجعه کنید.

اگر فقط یک محدوده چاپ کنید ، اتفاق عجیبی رخ می دهد:

از بسیاری جهات ، شیء بازگردانده شده توسط دامنه () رفتار می کند که گویی این یک لیست است ، اما در واقع اینگونه نیست. این شیء است که هنگام تکرار آن ، موارد پی در پی دنباله مورد نظر را برمی گرداند ، اما واقعاً این لیست را ایجاد نمی کند ، بنابراین باعث صرفه جویی در فضا می شود.

ما می گوییم چنین شیئی قابل تکرار است ، یعنی به عنوان هدف برای کارکردها و سازه هایی که انتظار دارند چیزی باشد که بتوانند موارد پی در پی را بدست آورند تا زمانی که عرضه خسته نشود. ما دیدیم که بیانیه برای چنین ساختاری است ، در حالی که نمونه ای از عملکردی که یک تکرار کننده را به خود اختصاص می دهد ، جمع () است:

بعداً عملکردهای بیشتری را مشاهده خواهیم کرد که تکرار کننده ها را برمی گرداند و به عنوان استدلال تکرار می شود. در فصل ساختار داده ها ، ما در مورد جزئیات بیشتر در مورد لیست () بحث خواهیم کرد.

4. 4بیانیه ها را بشکنید و ادامه دهید ، و بندهای دیگر در حلقه ها

بیانیه شکست ، مانند C ، از حلقه حفاظت شده برای حلقه یا در حالی که حلقه می شود ، جدا می شود.

اظهارات حلقه ممکن است یک بند دیگر داشته باشد. هنگامی که حلقه از طریق فرسودگی قابل تکرار (با) یا هنگامی که شرط نادرست (با در حالی) خاتمه یابد ، اجرا می شود ، اما نه وقتی حلقه با بیانیه شکست خاتمه یابد. این توسط حلقه زیر مثال زده می شود ، که به دنبال شماره های اصلی است:

(بله ، این کد صحیح است. از نزدیک نگاه کنید: بند Else متعلق به حلقه for است ، نه بیانیه IF.)

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

بیانیه ادامه ، که از C وام گرفته شده است ، با تکرار بعدی حلقه ادامه می یابد:

4. 5اظهارات را تصویب کنید

بیانیه پاس هیچ کاری نمی کند. این می تواند در صورت نیاز به بیانیه به صورت نحوی مورد استفاده قرار گیرد اما برنامه نیازی به اقدامی ندارد. مثلا:

این معمولاً برای ایجاد کلاسهای حداقل استفاده می شود:

یکی دیگر از Pass Pass می تواند به عنوان یک محلول برای یک عملکرد یا بدنه مشروط هنگام کار روی کد جدید استفاده شود و به شما امکان می دهد تا در یک سطح انتزاعی تر فکر کنید. پاس بی صدا نادیده گرفته می شود:

4. 6اظهارات مطابقت

یک عبارت مسابقه یک عبارت را می گیرد و مقدار آن را با الگوهای پی در پی به عنوان یک یا چند بلوک مورد مقایسه می کند. این از نظر سطحی شبیه به بیانیه سوئیچ در C ، Java یا JavaScript (و بسیاری از زبان های دیگر) است ، اما بیشتر شبیه به تطبیق الگوی در زبانهایی مانند Rust یا Haskell است. فقط اولین الگویی که مطابقت دارد اجرا می شود و همچنین می تواند مؤلفه ها (عناصر دنباله یا ویژگی های شی) را از مقدار به متغیرها استخراج کند.

ساده ترین فرم یک مقدار موضوع را در برابر یک یا چند مورد مقایسه می کند:

توجه داشته باشید که آخرین بلوک: "نام متغیر" _ به عنوان کارت وحشی عمل می کند و هرگز با هم مطابقت ندارد. اگر هیچ موردی مطابقت نداشته باشد ، هیچ یک از شعب اجرا نمی شود.

شما می توانید چندین کلمه را در یک الگوی واحد با استفاده از |("یا"):

الگوهای می توانند مانند تکالیف بسته بندی به نظر برسند و می توانند برای اتصال متغیرها استفاده شوند:

آن را با دقت مطالعه کنید! الگوی اول دارای دو لفظ است و می توان به عنوان گسترش الگوی تحت اللفظی که در بالا نشان داده شده است فکر کرد. اما دو الگوی بعدی یک تحت اللفظی و یک متغیر را با هم ترکیب می کنند و متغیر یک مقدار را از موضوع (نقطه) متصل می کند. الگوی چهارم دو مقدار را ضبط می کند ، که باعث می شود از نظر مفهومی شبیه به تکلیف بسته بندی (x ، y) = نقطه باشد.

اگر از کلاس ها برای ساختار داده های خود استفاده می کنید می توانید از نام کلاس و به دنبال آن یک لیست آرگومان شبیه سازنده استفاده کنید ، اما با امکان ضبط ویژگی ها در متغیرها:

شما می توانید از پارامترهای موقعیتی با برخی از کلاس های ساخته شده استفاده کنید که سفارش برای ویژگی های آنها (به عنوان مثال DataClasses) ارائه می دهد. همچنین می توانید با تنظیم ویژگی ویژه __match_args__ در کلاسهای خود ، موقعیت خاصی را برای ویژگی ها در الگوهای تعریف کنید. اگر روی ("X" ، "Y") تنظیم شود ، الگوهای زیر همه معادل هستند (و همه ویژگی Y را به متغیر VAR متصل می کنند):

یک روش توصیه شده برای خواندن الگوهای این است که به آنها به عنوان یک شکل گسترده از آنچه در سمت چپ یک تکلیف قرار می دهید ، نگاه کنید تا بفهمید کدام متغیرها به چه چیزی تنظیم می شوند. فقط نامهای مستقل (مانند VAR فوق) با بیانیه مسابقه به آنها اختصاص داده می شود. نامهای نقطه ای (مانند foo. bar) ، نام ویژگی ها (x = و y = بالاتر) یا نام های کلاس (که توسط "(...)" که در کنار آنها مانند نقطه بالا شناخته شده است) هرگز به آن اختصاص نمی یابد.

الگوهای می توانند به طور خودسرانه توخالی شوند. به عنوان مثال ، اگر لیست کوتاهی از امتیاز داشته باشیم ، می توانیم مانند این مطابقت داشته باشیم:

ما می توانیم یک بند IF را به یک الگوی ، معروف به "نگهبان" اضافه کنیم. اگر نگهبان نادرست باشد ، مسابقه همچنان بلوک مورد بعدی را امتحان می کند. توجه داشته باشید که ضبط مقدار قبل از ارزیابی نگهبان اتفاق می افتد:

چندین ویژگی مهم دیگر این جمله:

مانند تکالیف بسته بندی ، الگوهای Tuple و لیست دقیقاً همان معنی را دارند و در واقع با توالی های دلخواه مطابقت دارند. یک استثناء مهم این است که آنها با تکرارها یا رشته ها مطابقت ندارند.

الگوهای دنباله پشتیبانی از بسته بندی گسترده: [x ، y ، *استراحت] و (x ، y ، *استراحت) کار مشابه با تکالیف بسته بندی. نام بعد از * ممکن است _ باشد ، بنابراین (x ، y ، * _) با دنباله ای از حداقل دو مورد بدون اتصال موارد باقیمانده مطابقت دارد.

الگوهای نقشه برداری: مقادیر "پهنای باند" و "تأخیر" را از یک فرهنگ لغت ضبط می کند. بر خلاف الگوهای دنباله ، کلیدهای اضافی نادیده گرفته می شوند. یک بسته بندی مانند ** استراحت نیز پشتیبانی می شود.(اما ** _ اضافی خواهد بود ، بنابراین مجاز نیست.)

Subpattes ممکن است با استفاده از کلمه کلیدی AS ضبط شود:

عنصر دوم ورودی را به عنوان P2 ضبط می کند (تا زمانی که ورودی دنباله ای از دو نقطه باشد)

بیشتر تحت اللفظی ها با برابری مقایسه می شوند ، اما تک آهنگ ها درست ، نادرست و هیچ یک با هویت مقایسه نمی شوند.

الگوهای ممکن است از ثابت های نامگذاری شده استفاده کنند. این موارد باید نام آنها باشد تا از تفسیر آنها به عنوان متغیر ضبط جلوگیری شود:

برای توضیح بیشتر و مثال های اضافی ، می توانید به PEP 636 که در قالب آموزش نوشته شده است ، جستجو کنید.

4. 7تعریف توابع ¶

ما می توانیم تابعی ایجاد کنیم که سری Fibonacci را به یک مرز دلخواه می نویسد:

کلمه کلیدی DEF یک تعریف عملکرد را معرفی می کند. باید با نام عملکرد و لیست پرانتز پارامترهای رسمی دنبال شود. جمله هایی که بدنه عملکرد را تشکیل می دهند از خط بعدی شروع می شوند و باید در آن قرار بگیرند.

اولین بیانیه بدنه عملکرد می تواند به صورت اختیاری یک رشته رشته باشد. این رشته تحت اللفظی رشته مستندات عملکرد یا Docstring است.(اطلاعات بیشتر در مورد DocStrings را می توان در بخش های مستندات بخش یافت.) ابزارهایی وجود دارد که از Docstrings برای تولید خودکار اسناد آنلاین یا چاپی استفاده می کنند ، یا اجازه می دهد کاربر به طور تعاملی از طریق کد مرور کند. این خوب است که DocStrings را در کد که می نویسید ، درج کنید ، بنابراین عادت آن را ایجاد کنید.

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

پارامترهای واقعی (آرگومان) به یک تماس عملکردی در جدول نماد محلی عملکرد نامیده شده هنگام نامگذاری شده معرفی می شوند. بنابراین ، آرگومان ها با استفاده از تماس با مقدار (جایی که مقدار همیشه یک مرجع شیء است ، نه مقدار شیء) منتقل می شوند. 1 هنگامی که یک تابع عملکرد دیگری را فراخوانی می کند ، یا خود را به صورت بازگشتی فراخوانی می کند ، یک جدول نماد محلی جدید برای آن تماس ایجاد می شود.

تعریف عملکرد نام عملکرد را با شیء عملکرد در جدول نماد فعلی مرتبط می کند. مترجم شیء اشاره شده توسط آن نام را به عنوان یک عملکرد تعریف شده توسط کاربر تشخیص می دهد. نامهای دیگر همچنین می توانند به همان شیء عملکرد اشاره کنند و همچنین می توانند برای دسترسی به عملکرد استفاده شوند:

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

نوشتن تابعی که لیستی از شماره های سری فیبوناچی را به جای چاپ آن بازگرداند ، ساده است:

این مثال ، طبق معمول ، برخی از ویژگی های جدید پایتون را نشان می دهد:

بیانیه بازگشت با یک مقدار از یک تابع برمی گردد. بازگشت بدون یک استدلال بیان هیچ کدام را برمی گرداند. سقوط از انتهای یک تابع نیز به هیچ وجه برمی گردد.

بیانیه result. append (a) روشی از لیست شیء را می نامد. یک روش تابعی است که "به یک شیء" تعلق دارد و نامیده می شود. انواع مختلف روشهای مختلف را تعریف می کنند. روش های مختلف ممکن است بدون ایجاد ابهام ، دارای همین نام باشد.(می توان انواع و روشهای شیء خود را تعریف کرد ، با استفاده از کلاس ها ، کلاس ها را ببینید) روش ضمیمه () نشان داده شده در مثال برای اشیاء لیست تعریف شده است. این عنصر جدید را در انتهای لیست اضافه می کند. در این مثال معادل نتیجه = نتیجه + [a] ، اما کارآمدتر است.

4. 8اطلاعات بیشتر در مورد تعریف توابع

همچنین می توان توابع با تعداد متغیر آرگومان را تعریف کرد. سه شکل وجود دارد که می توانند با هم ترکیب شوند.

4. 8. 1. مقادیر استدلال پیش فرض

مفیدترین فرم مشخص کردن مقدار پیش فرض برای یک یا چند آرگومان است. این تابعی را ایجاد می کند که می تواند با آرگومان های کمتری از آنچه که برای اجازه تعریف شده است خوانده شود. مثلا:

این عملکرد را می توان از چند طریق فراخوانی کرد:

فقط استدلال اجباری: ask_ok ("آیا واقعاً می خواهید ترک کنید؟")

ارائه یکی از استدلال های اختیاری: ask_ok ("خوب برای بازنویسی پرونده؟" ، 2)

یا حتی همه استدلال ها را ارائه دهید: ask_ok ("خوب برای بازنویسی پرونده؟" ، 2 ، "بیا ، فقط بله یا نه!")

این مثال همچنین کلمه کلیدی را معرفی می کند. این آزمایش می کند که آیا یک دنباله حاوی یک مقدار خاص است یا خیر.

مقادیر پیش فرض در نقطه تعریف عملکرد در دامنه تعیین کننده ارزیابی می شوند ، به طوری

هشدار مهم: مقدار پیش فرض فقط یک بار ارزیابی می شود. این باعث می شود که پیش فرض یک شیء قابل تغییر مانند لیست ، فرهنگ لغت یا موارد بیشتر کلاس ها باشد. به عنوان مثال ، عملکرد زیر آرگومان های منتقل شده به آن را در تماس های بعدی جمع می کند:

این چاپ خواهد شد

اگر نمی خواهید پیش فرض بین تماس های بعدی به اشتراک گذاشته شود ، می توانید به جای آن عملکردی را مانند این بنویسید:

4. 8. 2. استدلال کلمات کلیدی ¶

توابع را می توان با استفاده از آرگومان های کلمه کلیدی فرم kwarg = مقدار نامید. به عنوان مثال ، عملکرد زیر:

یک آرگومان مورد نیاز (ولتاژ) و سه استدلال اختیاری (حالت ، عمل و نوع) را می پذیرد. این عملکرد را می توان به هر یک از روشهای زیر فراخوانی کرد:

اما تمام تماس های زیر نامعتبر خواهد بود:

در یک تماس عملکردی ، آرگومان های کلیدی باید از استدلال های موقعیتی پیروی کنند. تمام آرگومان های کلیدی تصویب شده باید با یکی از آرگومان های پذیرفته شده توسط عملکرد مطابقت داشته باشند (به عنوان مثال بازیگر یک آرگومان معتبر برای عملکرد طوطی نیست) و ترتیب آنها مهم نیست. این همچنین شامل آرگومان های غیر فوری (به عنوان مثال طوطی (ولتاژ = 1000) نیز معتبر است). هیچ استدلالی ممکن است بیش از یک بار ارزش دریافت کند. در اینجا مثالی وجود دارد که به دلیل این محدودیت شکست می خورد:

هنگامی که یک پارامتر رسمی نهایی از نام ** وجود دارد ، یک فرهنگ لغت دریافت می کند (به انواع نقشه برداری مراجعه کنید - DICT) که حاوی تمام آرگومان های کلیدی است به جز موارد مربوط به یک پارامتر رسمی. این ممکن است با یک پارامتر رسمی از نام *نام *(شرح داده شده در زیر بخش بعدی) ترکیب شود که یک تاپل حاوی آرگومان های موقعیتی فراتر از لیست پارامتر رسمی دریافت می کند.( *نام باید قبل از نام ** رخ دهد.) به عنوان مثال ، اگر عملکردی مانند این را تعریف کنیم:

می توان اینگونه خوانده شد:

و البته چاپ می شود:

توجه داشته باشید که ترتیب چاپ آرگومان های کلیدی در آن تضمین شده است که با ترتیب ارائه شده در تماس عملکردی مطابقت داشته باشد.

4. 8. 3. پارامترهای خاص

به طور پیش فرض ، آرگومان ها ممکن است به یک عملکرد پایتون یا از طریق موقعیت یا صریح توسط کلمه کلیدی منتقل شوند. برای خوانایی و عملکرد ، معقول است که می توان آرگومان ها را محدود کرد تا یک توسعه دهنده فقط به تعریف عملکرد نگاه کند تا مشخص شود آیا موارد توسط موقعیت ، از طریق موقعیت یا کلمه کلیدی یا با کلمه کلیدی منتقل می شوند.

تعریف عملکرد ممکن است شبیه باشد:

کجا / و * اختیاری است. در صورت استفاده ، این نمادها نوع پارامتر را با نحوه انتقال آرگومان ها به عملکرد نشان می دهد: فقط موقعیتی ، کلمه موقعیتی یا کلید واژه و فقط کلمه کلیدی. پارامترهای کلمه کلیدی نیز به عنوان پارامترهای نامگذاری شده گفته می شود.

4. 8. 3. 1. آرگومان های مثبت-یا کلید واژگونی

اگر / و * در تعریف عملکرد وجود ندارد ، آرگومان ها ممکن است توسط موقعیت یا با کلمه کلیدی به یک عملکرد منتقل شوند.

4. 8. 3. 2. پارامترهای فقط موقعیتی

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

پارامترهای زیر / ممکن است کلمه موقعیت یا کلید واژه یا فقط کلمه کلیدی باشد.

4. 8. 3. 3. استدلال فقط کلمات کلیدی

برای علامت گذاری پارامترها به عنوان فقط کلید واژه ، نشان می دهد که پارامترها باید توسط آرگومان کلیدی منتقل شوند ، قبل از اولین پارامتر فقط کلمه کلیدی ، یک * را در لیست آرگومان قرار دهید.

4. 8. 3. 4. مثالهای عملکردی

تعریف عملکرد زیر را در نظر بگیرید که توجه زیادی به نشانگرها / و * دارد:

تعریف اول عملکرد ، استاندارد_ارگ ، آشناترین شکل ، هیچ محدودیتی در کنوانسیون فراخوانی وجود ندارد و آرگومان ها ممکن است توسط موقعیت یا کلمه کلیدی منتقل شوند:

عملکرد دوم POS_ONLY_ARG فقط به استفاده از پارامترهای موقعیتی محدود می شود زیرا A / در تعریف عملکرد وجود دارد:

عملکرد سوم KWD_ONLY_ARGS فقط آرگومان های کلیدی را که توسط A * در تعریف عملکرد نشان داده شده است ، اجازه می دهد:

و آخرین استفاده از هر سه کنوانسیون فراخوان در همان تعریف عملکرد:

سرانجام ، این تعریف عملکرد را در نظر بگیرید که یک برخورد بالقوه بین نام استدلال موقعیت و ** KWDS که دارای نام به عنوان یک کلید است ، در نظر بگیرید:

هیچ تماس احتمالی وجود ندارد که باعث شود آن را به درستی برگرداند زیرا کلمه کلیدی "نام" همیشه به پارامتر اول متصل می شود. مثلا:

اما با استفاده از / (فقط آرگومان های موقعیتی) ، از آنجا که اجازه می دهد نام به عنوان یک آرگومان موقعیتی و "نام" به عنوان یک کلید در آرگومان های کلمه کلیدی امکان پذیر باشد:

به عبارت دیگر ، از نام پارامترهای فقط موقعیتی می توان در ** KWDS بدون ابهام استفاده کرد.

4. 8. 3. 5. رت

مورد استفاده مشخص می کند که از کدام پارامترها در تعریف عملکرد استفاده می شود:

اگر می خواهید نام پارامترها در دسترس کاربر نباشد ، فقط از موقعیت مثبت استفاده کنید. این مفید است که نامهای پارامترها معنای واقعی ندارند ، اگر می خواهید هنگام فراخوانی عملکرد ، ترتیب آرگومان ها را اجرا کنید یا اگر نیاز به برخی از پارامترهای موقعیتی و کلمات کلیدی دلخواه دارید.

فقط در صورت داشتن نام ، از کلمات کلیدی استفاده کنید و تعریف عملکرد با صریح با نام قابل درک تر است یا می خواهید از تکیه بر کاربران به موقعیت آرگومان که در حال تصویب است ، جلوگیری کنید.

برای یک API ، در صورت اصلاح نام پارامتر در آینده ، از فقط موقعیتی برای جلوگیری از تغییر API استفاده کنید.

4. 8. 4. لیست استدلال های دلخواه

سرانجام ، کمترین گزینه مورد استفاده ، مشخص کردن این است که می توان یک عملکرد را با تعداد دلخواه آرگومان ها فراخوانی کرد. این استدلال ها در یک حلقه پیچیده می شوند (به Tuples و توالی ها مراجعه کنید). قبل از تعداد متغیر آرگومان ها ، ممکن است آرگومان های صفر یا بیشتر اتفاق بیفتد.

به طور معمول ، این آرگومان های متغیر در لیست پارامترهای رسمی آخرین خواهند بود ، زیرا آنها تمام آرگومان های ورودی باقی مانده را که به عملکرد منتقل می شوند ، جمع می کنند. هر پارامتر رسمی که پس از پارامتر *args رخ می دهد ، آرگومان های "فقط کلمه کلیدی" هستند ، به این معنی که فقط می توان از آنها به عنوان کلمات کلیدی استفاده کرد تا آرگومان های موقعیتی.

4. 8. 5. لیست آرگومان بسته بندی

وضعیت معکوس زمانی اتفاق می افتد که آرگومان ها در حال حاضر در یک لیست یا tuple قرار دارند اما برای یک تماس عملکردی که نیاز به آرگومان های موقعیتی جداگانه دارد ، باید بسته بندی نشده باشد. به عنوان مثال ، عملکرد (محدوده داخلی) انتظار می رود آرگومان های شروع و توقف جداگانه باشد. اگر آنها به طور جداگانه در دسترس نیستند ، تماس با عملکرد را با * -اپراتور بنویسید تا آرگومان ها را از لیست یا tuple خارج کنید:

با همان شیوه ، فرهنگ لغت ها می توانند آرگومان های کلیدی را با **- اپراتور ارائه دهند:

4. 8. 6. عبارات لامبدا ¶

توابع ناشناس کوچک را می توان با کلمه کلیدی Lambda ایجاد کرد. این عملکرد مجموع دو آرگومان خود را برمی گرداند: Lambda A ، B: A+B. توابع Lambda را می توان در هر جا که اجزای عملکرد مورد نیاز هستند استفاده شود. آنها از نظر نحوی محدود به یک عبارت واحد هستند. از نظر معنایی ، آنها فقط برای یک تعریف عملکرد طبیعی قند نحوی هستند. مانند تعاریف تابع تو در تو ، توابع لامبدا می توانند متغیرهایی را از دامنه حاوی ارجاع دهند:

مثال فوق از یک عبارت Lambda برای بازگشت یک تابع استفاده می کند. استفاده دیگر این است که یک عملکرد کوچک را به عنوان یک آرگومان تصویب کنید:

4. 8. 7. رشته های مستندات

در اینجا برخی از کنوانسیون ها در مورد محتوا و قالب بندی رشته های مستندات آورده شده است.

خط اول همیشه باید خلاصه ای کوتاه و مختصر از هدف شی باشد. برای کوتاه بودن ، نباید به صراحت نام یا نوع شیء را بیان کند ، زیرا این موارد با روش های دیگر در دسترس هستند (به جز اینکه نام این یک فعل باشد که عملکرد یک عملکرد را توصیف می کند). این خط باید با یک حرف بزرگ شروع شود و با یک دوره پایان یابد.

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

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

در اینجا نمونه ای از Docstring چند خطی آورده شده است:

4. 8. 8. یادداشت های عملکردی ¶

حاشیه نویسی عملکرد اطلاعات ابرداده کاملاً اختیاری در مورد انواع استفاده شده توسط توابع تعریف شده توسط کاربر است (برای اطلاعات بیشتر به PEP 3107 و PEP 484 مراجعه کنید).

Aotations are stored in the __aotations__ attribute of the function as a dictionary and have no effect on any other part of the function. Parameter aotations are defined by a colon after the parameter name, followed by an expression evaluating to the value of the aotation. Retu aotations are defined by a literal ->، به دنبال یک عبارت ، بین لیست پارامتر و روده بزرگ که نشانگر پایان عبارت DEF است. مثال زیر دارای یک آرگومان مورد نیاز ، یک آرگومان اختیاری و حاشیه نویسی است که حاشیه نویسی می شود:

4. 9Intermezzo: سبک کدگذاری

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

برای پایتون ، PEP 8 به عنوان راهنمای سبک ظاهر شده است که بیشتر پروژه ها به آن پایبند هستند. این یک سبک برنامه نویسی بسیار خواندنی و چشمگیر را ترویج می کند. هر توسعه دهنده پایتون باید آن را در مقطعی بخواند. در اینجا مهمترین نکاتی که برای شما استخراج شده است:

از تورفتگی 4-فضای و بدون زبانه استفاده کنید.

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

خطوط را ببندید تا از 79 کاراکتر تجاوز نکنند.

این به کاربران با نمایشگرهای کوچک کمک می کند و امکان داشتن چندین پرونده کد را در کنار نمایشگرهای بزرگتر فراهم می کند.

از خطوط خالی برای جدا کردن توابع و کلاس ها و بلوک های بزرگتر کد در توابع استفاده کنید.

در صورت امکان ، نظرات خود را بر روی خط خود قرار دهید.

از فضاهایی در اطراف اپراتورها و بعد از کاما استفاده کنید ، اما به طور مستقیم در داخل سازه های براکت نیست: A = F (1 ، 2) + G (3 ، 4).

کلاس ها و توابع خود را به طور مداوم نامگذاری کنید. این کنوانسیون برای استفاده از رده های رده برای کلاس ها و LAMENCHAND_WOTH_UNDERSCORES برای توابع و روش ها است. همیشه از خود به عنوان نام برای آرگومان روش اول استفاده کنید (برای کسب اطلاعات بیشتر در مورد کلاس ها و روش ها ، نگاه اول به کلاس ها را ببینید).

در صورت استفاده از کد شما در محیط های بین المللی از رمزگذاری های فانتزی استفاده نکنید. پیش فرض Python ، UTF-8 یا حتی ASCII ساده در هر صورت بهترین کار را می کند.

به همین ترتیب ، اگر فقط کوچکترین فرصتی که مردم با زبان دیگری صحبت می کنند ، کد را می خوانند یا حفظ می کنند ، از شخصیت های غیر ASCII در شناسه استفاده نکنید.

در واقع ، تماس با مرجع شیء توضیحات بهتری خواهد بود ، زیرا اگر یک شیء قابل تغییر منتقل شود ، تماس گیرنده تغییراتی را که کاللی به آن ایجاد می کند مشاهده می کند (مواردی که در یک لیست قرار داده شده است).

تحليلات الفوركس...
ما را در سایت تحليلات الفوركس دنبال می کنید

برچسب : نویسنده : یکتا ناصر بازدید : <-PostHit-> تاريخ : يکشنبه 6 فروردين 1402 ساعت: 13:33