Что отличает аргумент с ключевым словом от аргумента без ключевого слова в Python?

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

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

def print_employee_details(name, age=0, location=None):
    """Print details of employees.

    Arguments:
        name: Employee name
        age: Employee age
        location: Employee location
    """
    print(name)
    if age > 0:
        print(age)
    if location is not None:
        print(location)

Здесь я задокументировал функцию с тремя ключевыми аргументами.

Я могу вызвать эту функцию без аргументов ключевого слова:

print_employee_details('Jack', 24, 'USA')

Или я могу вызвать эту функцию с аргументами ключевого слова.

print_employee_details(name='Jack', age=24, location='USA')

Поэтому мне кажется, что документирование всех трех параметров в качестве аргументов ключевого слова, как показано ниже, также нормально.

def print_employee_details(name, age=0, location=None):
    """Print details of employees.

    Keyword Arguments:
        name: Employee name
        age: Employee age
        location: Employee location
    """
    print(name)
    if age > 0:
        print(age)
    if location is not None:
        print(location)

Так в чем же на самом деле разница между обычными аргументами и ключевыми аргументами?


person Lone Learner    schedule 06.01.2016    source источник
comment
Вы не можете вызвать функцию с аргументом, отличным от ключевого слова, без указания значения аргумента. В то же время противоположное неверно. Вы можете вызвать функцию с аргументом (аргументами) ключевого слова без указания каких-либо значений (будет использоваться значение по умолчанию).   -  person Ivan Velichko    schedule 06.01.2016
comment
Настоящий ответ (а не дубликат) заключается в том, что вы документируете параметры. Аргументы — это значения, которые вы передаете во время вызова! Следовательно, существует разница между аргументами, передаваемыми позиционно, и аргументами, передаваемыми по ключевому слову. Для параметров в определении функции такого различия не существует.   -  person deceze♦    schedule 06.01.2016
comment
Я бы сказал, что основная причина этого заключается в том, что вы можете передавать аргументы в любом порядке. То есть print_employee_details(age=24, name='Джек', location='США') делает то же самое, что и print_employee_details('Джек', 24, 'США')   -  person Metareven    schedule 06.01.2016
comment
Это дубликат stackoverflow.com/questions /1419046/ который дает ответы.   -  person sabbahillel    schedule 06.01.2016
comment
Я посмотрел на него, и тот, который я выбрал, показался мне более подходящим.   -  person TigerhawkT3    schedule 06.01.2016
comment
@TigerhawkT3 Не согласен.   -  person deceze♦    schedule 06.01.2016
comment
Что ж, снова откройте, а затем закройте его с новым дубликатом, если вы так сильно к этому относитесь.   -  person TigerhawkT3    schedule 06.01.2016
comment
Поверьте, мне бы хотелось иметь возможность связать более одной цели, но система вынуждает меня выбрать одну. Поскольку этот вопрос спрашивает об использовании и в чем различие, а связанная цель дублирования касается того, когда использовать каждый стиль, я чувствовал, что это лучше всего подходит. Чтение всех результатов на странице или двух результатов Google об этом (есть много информации по этой теме) было бы идеальным способом получить действительно хорошее представление о том, как это работает и когда что использовать.   -  person TigerhawkT3    schedule 06.01.2016