2010-02-02 3 views
5

Sia C# che Python consentono argomenti denominati, quindi è possibile scrivere qualcosa come: foo(bar:1). Questo è grandioso, specialmente in combinazione con argomenti opzionali.Argomenti con nome: C# vs Python

La mia domanda è: quali sono le differenze tra gli argomenti con nome C# e Python, se ce ne sono? Non mi interessa quale sia il "migliore", ma se ci siano differenze e nelle possibili motivazioni dietro queste differenze.

E se qualcuno conosce le differenze con le implementazioni di altre lingue di questa funzione (Ruby o Objective-C, forse), potrebbe essere anche interessante.

a cura di fare comunità wiki

+0

Per quale scopo è questa domanda? Penso che se non c'è uno sfondo sufficiente, questa domanda potrebbe diventare soggettiva ... –

risposta

5

Python non solo consente di cattura non specificati argomenti con nome in un dizionario, ma consente anche di decomprimere un dict in argomenti:

>>> def f(alfa, beta, gamma): 
    ...  print alfa, beta, gamma 
    ... 
    >>> f(**{'alfa': 1, 'beta': 2, 'gamma': 3}) 
    1 2 3 

e passare loro lungo il torrente:

>>> def g(**kwargs): 
    ...  f(**kwargs) 
    ... 
    >>> g(**{'alfa': 1, 'beta': 2, 'gamma': 3}) 
    1 2 3 
6

Python consente di "catturare" non specificati argomenti con nome in un dizionario, che è piuttosto comodo

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