аргументы формальной функции, сопровождаемые ** kwargs в вызовах функций - PullRequest
1 голос
/ 28 января 2020

Я понимаю, что аргументы функции должны иметь следующую иерархию упорядочения :

  1. Формальные позиционные аргументы
  2. *args
  3. Аргументы ключевых слов
  4. **kwargs

Я получаю эту ошибку:

SyntaxError: ключевое слово не может быть выражением

ниже:

def dfDiff(old, new, **kwargs):
    # default dict of optional function arguments
    d = {'city': 'Austin',
         'capital': True,
         'indx' : 5}
    # if optional args are provided 
    if kwargs is not None:
        # find the common keys
        k_passed = kwargs.keys() & d.keys()
        # change the default value
        for k in k_passed:
            d[k] = kwargs[k]    


test_ = dfDiff(1, 2, 'city' = 'Albany')

я прошел **kwargs неправильно или есть какая-то другая проблема?

Ответы [ 2 ]

3 голосов
/ 28 января 2020

city='Albany', не заключайте в кавычки city.

1 голос
/ 28 января 2020

Как сказал @MichaelBianconi в комментариях, давая ключевые аргументы, вам не нужно заключать их в строки. Просто относитесь к ним как к переменным. Итак, правильный код:

test_ = dfDiff(1, 2, city = 'Albany')

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

test_ = dfDiff(1, 2, city='Albany')
...