Аргументація Python: значення за замовчуванням або вказане значення


174

Я хотів би мати необов'язковий аргумент, який за замовчуванням має значення, якщо тільки прапор присутній без вказаного значення, але зберігає вказане користувачем значення замість типового, якщо користувач вказує значення. Чи є вже доступна дія для цього?

Приклад:

python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2

Я можу створити дію, але хотів подивитися, чи існує такий спосіб зробити це.

Відповіді:


273
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)

% test.py 
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)

  • nargs='?' означає 0 або 1 аргументи
  • const=1 встановлює за замовчуванням, коли є 0 аргументів
  • type=int перетворює аргумент в int

Якщо ви хочете test.pyвстановити exampleзначення 1, навіть якщо не --exampleвказано ні, додайте default=1. Тобто, с

parser.add_argument('--example', nargs='?', const=1, type=int, default=1)

тоді

% test.py 
Namespace(example=1)

Як це зробити за допомогою рядків? У мене є дилема з диференціацією "" (порожній рядок за замовчуванням) та "" (порожній рядок, як введено користувачем). У коді зараз я використовую за замовчуванням, і оскільки мені потрібно зробити кілька операцій, у мене є щось подібне self.foo = (args.bar or some_else_source).upper(). Він зламається на жоден об'єкт AFAIUC.
0андрій

16

Насправді вам потрібно використовувати лише defaultаргумент, add_argumentяк у цьому test.pyсценарії:

import argparse

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--example', default=1)
    args = parser.parse_args()
    print(args.example)

test.py --example
% 1
test.py --example 2
% 2

Деталі тут .


7

Різниця між:

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)

і

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)

таким чином:

myscript.py => налагодження - 7 (за замовчуванням) у першому випадку, а "Ні" у другому

myscript.py --debug => налагодження - 1 у кожному випадку

myscript.py --debug 2 => налагодження - 2 у кожному випадку

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.