Порядок аргументов ключевого слова и не ключевого слова

У меня есть следующий код:

def say_hello_then_call_f(f, *args, **kwargs): print 'args is', args print 'kwargs is', kwargs print("Hello! Now I'm going to call %s" % f) return f(*args, **kwargs) # when calling a function, however, * unpacks a tuple and ** unpacks a dict def g(x, y,s, z=1): return (x + y) / z 

Я не понимаю, почему строка ниже приводит к ошибке «non-keyword arg after keyword arg». Должно ли быть, что функции имеют Аргументы ключевых слов и только тогда аргументы без ключевого слова, даже когда передаются значения ?:

  • Украшая методы класса python, как передать экземпляр в декоратор?
  • Python - Как добавить место на каждые 3 символа?
  • Как получить доступ к запущенной программе сервера форм доступа к файлу fb (python)
  • Как написать на консоль в Google App Engine?
  • Найти новую папку в каталоге на Python
  • В Python, почему функция может изменять некоторые аргументы, воспринимаемые вызывающим, но не другие?
  •  say_hello_then_call_f(g, 1, y=2,4, z=5.) 

    благодаря

  • Как де-импортировать модуль Python?
  • как установить прокси-сервер для chrome в python webdriver
  • переменная класса vs для экземпляра --Python
  • Решить путь обнаружения на модуле App Engine
  • Python ValueError: слишком много значений для распаковки
  • Как исправить Python ValueError: плохие данные маршала?
  • 2 Solutions collect form web for “Порядок аргументов ключевого слова и не ключевого слова”

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

    В вашем примере:

     say_hello_then_call_f(g, 1, y=2, 4, z=5.) 

    Есть случаи, когда делаются как 4 , так и 4th3rd позиционный аргумент. Если вы считаете аргументы ключевого слова как позиционные аргументы, нет причин указывать слово, связанное с аргументом, а если нет, то у вас есть не постоянный интерфейс к функции эффективно.

    Кроме того, трудно сказать, идет ли это в *args или **kwargs в этот момент.

    Усугубляя это, если бы у нас была двусмысленность аргумента в сочетании с системой утиного ввода python , это быстро привело бы к некоторым проблемам, которые было бы ужасно отлаживать.

    Да, Python применяет порядок аргументов: все аргументы, отличные от ключевого слова, должны идти первыми, за ними следуют любые аргументы ключевых слов.

    Python - лучший язык программирования в мире.