命名参数:C#vs Python

red*_*una 5 c# python kwargs

C#和Python都允许使用命名参数,因此您可以编写如下内容:foo(bar:1).这很好,特别是与可选参数结合使用时.

我的问题是:如果有的话,C#和Python命名参数之间有什么区别?我对哪个是"最好的"不感兴趣,但是对于这些差异背后是否存在差异和可能的动机.

如果有人知道与其他语言的这个功能的实现(可能是Ruby或Objective-C)的差异,那也可能很有趣.

编辑以制作社区维基

Joh*_*ooy 6

Python允许您将未指定的命名参数"捕获"到dict中,这非常方便

>>> def f(**kw):
...     print kw
... 
>>> f(size=3, sides=6, name="hexagon")
{'sides': 6, 'name': 'hexagon', 'size': 3}
Run Code Online (Sandbox Code Playgroud)


Tom*_*ski 5

Python不仅允许您将未指定的命名参数捕获到dict中,还允许您将dict解压缩到参数中:

    >>> def f(alfa, beta, gamma):
    ...     print alfa, beta, gamma
    ...
    >>> f(**{'alfa': 1, 'beta': 2, 'gamma': 3})
    1 2 3
Run Code Online (Sandbox Code Playgroud)

并将它们传递到流中:

    >>> def g(**kwargs):
    ...     f(**kwargs)
    ...
    >>> g(**{'alfa': 1, 'beta': 2, 'gamma': 3})
    1 2 3
Run Code Online (Sandbox Code Playgroud)