Как мне использовать kwargs в качестве флагов без необходимости = True? - PullRequest
0 голосов
/ 29 апреля 2019

Я работаю над модулем Python, который выбирает, загружает / обновляет, а затем автоматически устанавливает другие модули. Как использовать ** kwargs (или альтернативу) без необходимости = True в конце для системы "flags"?

Я не очень опытный в целом, поэтому я не уверен, что здесь делать

В настоящее время, чтобы флаг без вывода сообщений работал, он должен выглядеть так:

pyup.imp(["psutil","shutil","os","sys","pyinstaller"],silent=True)

но я хочу, чтобы функция вызова выглядела так:

pyup.imp(["psutil","shutil","os","sys","pyinstaller"],silent)

Сама функция выглядит так (в pyup.py):

def imp(libs = [], *args, **kwargs):

где libs [] - массив, содержащий нужные библиотеки.

Как сделать так, чтобы вызов функции не требовал "= True"?

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Если вы хотите передать последовательность строковых флагов в вашу функцию (как если бы это было терминальное приложение), вы можете передать их как безымянные позиционные аргументы через *args.

def imp(libs=[], *args):
    silent = '--silent' in args

# somewhere else
imp([...], '--silent')
0 голосов
/ 29 апреля 2019

Если мы определили функцию, подобную этой, вы не сможете:

def imp(libs = [], *args, **kwargs):

Но если вы определили функцию следующим образом, вы можете:

def imp(libs = [], silent = True, *args, **kwargs):

и действительно, так же, как вы написали, вы можете запустить этот без проблем:

silent = True
imp(["psutils", ...], silent)

только то, что внутри функции, kwargs никогда не будет иметь ключа silent, поскольку он удерживается другим параметром.

...