আরগপারস স্টোর মিথ্যা যদি অনির্ধারিত থাকে


104
parser.add_argument('-auto', action='store_true')

-autoঅনির্ধারিত থাকলে কীভাবে আমি মিথ্যা সঞ্চয় করতে পারি ? আমি দৃain়রূপে মনে রাখতে পারি যে এইভাবে, এটি অনির্দিষ্ট না করে কিছু সংরক্ষণ করে না

উত্তর:


171

store_trueবিকল্প স্বয়ংক্রিয়ভাবে ডিফল্ট মান তৈরি করে মিথ্যা

একইভাবে, কমান্ড-লাইন আর্গুমেন্ট উপস্থিত না হলে সত্যেstore_false ডিফল্ট হবে ।

এই আচরণের উত্সটি সংক্ষিপ্ত এবং পরিষ্কার: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861

আরগপার্স ডক্স বিষয়টিতে পরিষ্কার নয়, তাই এখনই এগুলি আপডেট করব: http://hg.python.org/cpython/rev/49677cc6d83a


2
এ সম্পর্কে বেশ কয়েকটি মন্তব্য। প্রথমত, মনে হচ্ছে বিকল্পটি যদি হয় -barতবে hg.python.org/cpython/rev/49677cc6d83a এর উপর ভিত্তি করে destস্বয়ংক্রিয়ভাবে সেট করা আছে । তবে কোডটিতে এই ডিফল্ট আচরণটি কোথায় সেট করা হয়েছে তা আমি দেখতে পাচ্ছি না। আমি সর্বদা যুক্তিটি সুস্পষ্টভাবে সেট করে রেখেছি । এছাড়াও, আমি লেট মনে ডিফল্ট জন্য বিকল্প সত্যিই অর্থে দেখা যায় না যদি হয় । এই ক্ষেত্রে হওয়া উচিত নয় ? bardestbardest--bar--barstore_falsedestnotbar
ফাহিম মিঠা

4
আমি কনট্রিয়েন নামকরণ কনভেনশন বুঝতে পারি নি।
ব্রেইনলুপ

আমি একমত, এটি কিছুটা বিভ্রান্তিকর। যাইহোক, 'store_false' বা 'store_true' ক্রিয়া হিসাবে নির্দিষ্ট করা হয়েছে এবং কোনও ডিফল্ট মান নয়। সুতরাং, আপনি যখন প্রোগ্রামটিতে এই যুক্তি যুক্ত করেন, নির্দিষ্ট ক্রিয়াটি ট্রিগার করা হয়।
অ্যাডি

15

সঙ্গে

import argparse
parser=argparse.ArgumentParser()
parser.add_argument('-auto', action='store_true', )
args=parser.parse_args()
print(args)

চলমান

% test.py

উৎপাদনের

Namespace(auto=False)

সুতরাং এটি Falseডিফল্টরূপে সংরক্ষণ করা হবে বলে মনে হয় ।


3

রেমন্ড হেটেঞ্জার ইতিমধ্যে ওপির প্রশ্নের উত্তর দিয়েছেন।

যাইহোক, আমার গ্রুপ "store_false" ব্যবহার করে পঠনযোগ্যতার সমস্যার সম্মুখীন হয়েছে। বিশেষত যখন নতুন সদস্যরা আমাদের দলে যোগদান করেন। এর কারণ এটি ভাবার পক্ষে স্বজ্ঞাত উপায় হ'ল কোনও ব্যবহারকারী যখন কোনও যুক্তি নির্দিষ্ট করে, তখন সেই যুক্তির সাথে সম্পর্কিত মানটি সত্য বা 1 হবে।

উদাহরণস্বরূপ, যদি কোডটি হয় -

parser.add_argument('--stop_logging', action='store_false')

কোড পাঠক সম্ভবত স্টপ_লগিংয়ের মানটি সত্য হলে লগিং স্টেটমেন্টটি বন্ধ হয়ে যাওয়ার আশা করতে পারে। তবে নীচের মতো কোডগুলি পছন্দসই আচরণের বিপরীত দিকে পরিচালিত করবে -

if not stop_logging:
    #log

অন্যদিকে, যদি ইন্টারফেসটি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয় তবে "if-বিবৃতি" কাজ করে এবং পড়তে আরও স্বজ্ঞাত -

parser.add_argument('--stop_logging', action='store_true')
if not stop_logging:
    #log

7
আপনি যদি একটি গন্তব্যস্থল ওরফে সেট করতে পারেন, যা পাঠযোগ্যতা উন্নতি হবে: parser.add_argument('--stop_logging', action='store_false', dest='use_logging')
ক্রাসি

-4

store_false আসলে ডিফল্ট হিসাবে 0ডিফল্ট হবে (আপনি যাচাই করার জন্য পরীক্ষা করতে পারেন)। এটির ডিফল্ট কী পরিবর্তন করতে কেবল default=Trueআপনার ঘোষণায় যুক্ত করুন।

সুতরাং এই ক্ষেত্রে: parser.add_argument('-auto', action='store_true', default=True)


পাইথন ২.7 এবং ৩.৪-তে এটি প্রদর্শিত হবে না: >>> parser.add_argument('--bar', action='store_false') _StoreFalseAction(option_strings=['--bar'], dest='bar', nargs=0, const=False, default=True, type=None, choices=None, help=None, metavar=None) >>> parser.parse_args([]) Namespace(bar=True)
লায়ানোস

2
দুঃখিত, এটি আসলে অপ্ট পার্সির ডিফল্ট আচরণ। আরগপার্স স্টোরের বিপরীতে ডিফল্ট হওয়া উচিত। অর্থাত্ 'store_false' 'সত্য' এ ডিফল্ট।
ইউনিক্স-নিনজা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.