Именованные аргументы: C # против Python - PullRequest
5 голосов
/ 03 февраля 2010

И C #, и Python допускают именованные аргументы, поэтому вы можете написать что-то вроде: foo(bar:1). Это замечательно, особенно в сочетании с необязательными аргументами.

Мой вопрос таков: Каковы различия между именованными аргументами C # и Python, если они есть? Меня не интересует, какой из них "лучший", но есть ли различия и возможные мотивы этих различий.

И если кто-то знает о различиях с реализациями этой функции на других языках (возможно, Ruby или Objective-C), это тоже может быть интересно.

отредактировано для создания сообщества-вики

Ответы [ 2 ]

6 голосов
/ 03 февраля 2010

Python позволяет "ловить" неуказанные именованные аргументы в dict, что очень удобно

>>> def f(**kw):
...     print kw
... 
>>> f(size=3, sides=6, name="hexagon")
{'sides': 6, 'name': 'hexagon', 'size': 3}
5 голосов
/ 03 февраля 2010

Python не только позволяет вам указывать неопределенные именованные аргументы в dict, но также позволяет вам распаковать dict в аргументы:

    >>> 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
...