برای گزینهٔ روشن/خاموشِ خطِ فرمان، type=bool لزوماً رفتارِ موردانتظار نمیدهد: رشتهٔ غیرخالیِ False در Python بهTrue تبدیل میشود. بهتر است خاموشکردنِ صریح را از ندادنِ گزینه جدا نگه داریم. این تمرین با argparse سه حالت میسازد و تقدمِ مقدارِ پیشفرض، مقدارِ فرضیِ فایل و CLI را با یک سیاستِ نوشتهشده کنترل میکند.
چرا False به روشن تبدیل شد؟
parserِ اولِ آموزشی یک گزینهٔenabled با type=bool دارد. آرایهٔ اصیلِ['--enabled','False'] را به parse_args میدهیم؛ مقدارِ نهایی واقعاً True است. bool در این مسیر معنایِ لغویِ «False» را parse نکرده، فقط غیرخالیبودنِ رشته را دیده است. این مشاهده با Python۳٫۱۲٫۱۴ ثبت شده است.
اگر تنظیمی برایِ اجرایِ مدل یا آمادهسازیِ داده حساس است، نامِ خوشظاهرِ گزینه جای آزمونِ مقدارِ مؤثر را نمیگیرد. مثالِ حاضر هیچ برنامهٔ مدل، فایلِ تنظیمات یا متغیرِ محیطیِ واقعی را نمیخواند؛ فقط چند آرایهٔ ثابتِ خطِ فرمان را به parserِ محلی میدهد.
سه حالت را صریح بسازیم
در parserِ دوم، action را BooleanOptionalAction و default راNone میگذاریم. ندادنِ گزینه، None؛دادنِ--feature،True؛و--no-feature،False میدهد. هر سه حالت واقعاً اجرا و با انتظارِ مستقل مقایسه شدهاند. None اینجا علامتِ «از CLI تعیین نشده» است، نه خاموشِ قطعی.
| ورودیِ CLI | مقدارِ خواندهشده | با مقدارِ فرضیِ فایل=True |
|---|---|---|
| گزینه داده نشده | None | True از فایل |
| --feature | True | True از CLI |
| --no-feature | False | False از CLI |
گزینهٔ خاموشِ صریح را با عبارتی مانند cli_value or file_value ترکیب نکنید؛ False در چنین عبارتی میتواند کنار گذاشته و با Trueِ فایل جایگزین شود. در قراردادِ این تمرین، فقط None یعنی «به لایهٔ قبلی رجوع کن»؛ Falseِ صریح باید حفظ شود.
تقدمِ تنظیمات قانونِ برنامهٔ ماست
سیاستِ اصیلِ این مثال default سپس file سپس CLI است. مقدارِ پایه False است؛ اگر file_value تعیین شده باشد جای آن مینشیند و اگر cli_value ازNone متفاوت باشد، بر هر دو مقدم میشود. این تقدم را argparse خودش از فایل استخراج نکرده است؛ ما آن را پس از parse نوشتهایم.
برای کنترل، هر۹ترکیبِ None/True/Falseِ فایل وCLI اجرا شدهاند. کنارِ مقدارِ نهایی، source نیز default،file یاcli ثبت میشود. برای نمونه، file=True وcli=False باید False ازcli بدهد؛ file=False وcli=None باید همان False ازfile بماند. ثبتِ منبع کمک میکند بدانیم برنامه واقعاً کدام مقدار را انتخاب کرده است.
نشناختنِ گزینه را بیصدا قبول نکنیم
parserِ این تمرین allow_abbrev=False دارد و یک --unknownِ ثابت را واقعاً آزمایش میکند. parse_args با SystemExitِ کد۲ رد میشود؛ پیامِ آموزشی در حافظه گرفته شده و فرمانِ بیرونی اجرا نشده است. در آزمونِ جدا، دادنِ مقدارِ اضافیِ false پس از --feature نیز با کد۲ رد میشود؛ این گزینه مقدارِ رشتهای نمیگیرد. این انتخاب جلوی تعبیرِ حدسیِ گزینهٔ ناشناخته را در همین قرارداد میگیرد؛ اعتبارِ کلِ پیکربندی یا اختیارِ کاربر را تأیید نمیکند.
اگر از فایل یا متغیرِ محیطی ورودی میگیرید، parser و قواعدِ تبدیلِ همان لایه را جدا مشخص کنید. رشتهٔ «false»،boolِ False وکلیدِ غایب الزاماً یک داده نیستند. این صفحه فرمتِ YAML،JSONِ عمومی یا خواندنِ امنِ secrets را پیاده نکرده است.
مقدارِ مؤثر را همراهِ نسخه نگه داریم
پروندهٔ تنظیماتِ قابلبازتولید ثبتِ نسخه و ورودیِ اجرا را توضیح میدهد. مثالِ این صفحه نشان میدهد پیش از ثبت، باید مقدارِ مؤثر واقعاً از لایههایِ مجاز حل شده باشد. ثبتِ فقط متنِ CLI بدونِ نتیجهٔ ادغام میتواند علتِ اختلافِ دو اجرا را پنهان کند.
خواندنِ یادداشتِ انتشار نیز قابلیتِ اعلامشده را از شاهدِ اجرایی جدا میکند؛ وجودِ یک گزینه به معنیِ فعالشدنِ آن نیست. برای ادامه در مبانی هوش مصنوعی، نوع، مقدارِ نهایی و منشأِ هر تنظیم را با دادهٔ غیرمحرمانه ثبت کنید. این تمرین هیچ نامِ گزینه یا روشِ پیکربندیِ داخلیِ محصول اپرا را اعلام نمیکند.
فایل تمرین و منبع
کد مستقلِ تمرینِ محدود · تمام خروجیِ واقعیِ همین تمرین؛ JSON
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.