Python: проверка имен параметров по ключам kwarg - PullRequest
0 голосов
/ 27 апреля 2020

извините за наивный вопрос, но при выполнении этого кода:

def test_kwargs(n, **kwargs):  
    if kwargs is None:  
        print("no keyword args")  
        return  
    for key, value in kwargs.items():  
        print(str(key))  
        print(str(value))  
        if key==fn:
            print(value(10))  

test_kwargs(3,fn=lambda x: x^2)   

я получаю ошибку в проверке

if key==fn

NameError: name 'fn' is не определено

Однако print (str (key)) правильно выводит 'fn'.

Итак, что здесь происходит; почему проверка не проходит и как можно проверить ключ по возможным именам аргументов?

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

kwargs - это словарь, в котором ключи - это строки, а значения - это те значения, которые переданы внутрь. Вы можете вытащить определенный kwarg с помощью ключа строки, использованного для его передачи:

if "fn" in kwargs:
    fn = kwargs["fn"]

Вы можете также сделайте это:

fn = kwargs.get("fn")
if fn is not None:
    ... # do something with `fn`
1 голос
/ 27 апреля 2020

key - это строка с именем ключа, которое вы передаете, поэтому вы должны сравнить его с другой строкой.

Должно быть:

if key=="fn":
    print(value(10))
...