2010-02-02 71 views
5

C#和Python都允許命名參數,因此您可以編寫如下代碼:foo(bar:1)。這很好,尤其是與可選參數結合使用時。命名參數:C#vs Python

我的問題是:C#和Python命名參數(如果有的話)之間有什麼區別?我對哪種「最好」不感興趣,但是這些差異背後是否存在差異和可能的動機。

如果有人知道與其他語言實現此功能(Ruby或Objective-C,也許)的區別,那也可能很有趣。

編輯來讓社區維基

+0

這個問題到底是什麼?我認爲如果沒有足夠的背景,這個問題可能會變得主觀...... – 2010-02-02 21:48:45

回答

5

的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 
6

的Python讓你「趕」未指定命名的參數爲一個字典,這是非常方便的

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