И C# и Python позволяют параметры, передаваемые по имени, таким образом, можно записать что-то как: foo(bar:1)
. Здорово, особенно в сочетании с дополнительными аргументами.
Мой вопрос: каковы различия между C# и параметрами, передаваемыми по имени Python, если таковые имеются? Мне не интересно, в котором является "лучшим", но в том, существуют ли различия и в возможных мотивациях позади этих различий.
И если кто-то знает о различиях с реализациями других языков этой функции (Ruby или Objective C, возможно), который мог быть интересным также.
отредактированный для создания общественной Wiki
Python не только позволяет уловить неопределенные по имени аргументы в дикт, но и позволяет распаковать актектор в аргументы:
>>> def f(alfa, beta, gamma):
... print alfa, beta, gamma
...
>>> f(**{'alfa': 1, 'beta': 2, 'gamma': 3})
1 2 3
и пропустите их по потоку:
>>> def g(**kwargs):
... f(**kwargs)
...
>>> g(**{'alfa': 1, 'beta': 2, 'gamma': 3})
1 2 3
Python позволяет вам «перехватывать» неуказанные именованные аргументы в dict, что очень удобно
>>> def f(**kw):
... print kw
...
>>> f(size=3, sides=6, name="hexagon")
{'sides': 6, 'name': 'hexagon', 'size': 3}