2010-05-28 7 views
5

La documentazione Python specifica che è legale è di omettere le parentesi se una funzione richiede solo un singolo parametro, maÈ possibile chiamare la funzione Python a parametro singolo senza utilizzare le parentesi?

myfunction "Hello!" 

genera un errore di sintassi. Quindi, qual è l'affare?

(sto usando Python 3.1)

EDIT:

L'affermazione che ho letto si applica solo alle generator expressions:

 
    The parentheses can be omitted on calls with only one argument. 
+2

Sei sicuro? Puoi dirci dove leggi questa regola? Stai confondendo con il rubino? –

+1

Probabilmente stai confondendo Python con Ruby o Lua, dove a volte le parate possono essere omesse. – interjay

+2

@Jen: parlano di parentesi che indicano il generatore, non la chiamata di funzione. – SilentGhost

risposta

6

per la tua modifica:

Se si scrive giù un generatore di espressione, come stuff = (f(x) for x in items) avete bisogno le parentesi, proprio come è necessario il [ .. ] intorno ad una lista di comprensione.

Ma quando si passa qualcosa da un'espressione di generatore a una funzione (che è un modello piuttosto comune, perché è praticamente l'idea principale dei generatori), non sono necessari due set di parentesi, invece di qualcosa come s = sum((f(x) for x in items)) (staffe esterne per indicare una chiamata di funzione, interno per l'espressione generatore) si può solo scrivere sum(f(x) for x in items)

2

senza parentesi quelli non sarebbe functions ma statements o keywords (lingua intrinseca).

This StackOverflow thread (con alcune risposte molto bello) contains a lead as di come si può creare il proprio in puro Python (attraverso aggiustamenti avanzata, e non è una buona idea in 99,99% dei casi).

0

quanto ho capito la regola è solo circa le espressioni del generatore ... così per esempio: sum (x 2 per x nel range (10)), ma dovresti scrivere ancora: riduci (operator.add, (x 2 per x nel range (10))).

Questo non vale però per le funzioni generiche.

3

È possibile farlo con iPython - i -autocall opzione controlla riga di comando questa funzione (utilizzare -autocall 0 per disattivare la funzione, -autocall 1, l'impostazione predefinita, per farlo funzionare solo quando è presente un argomento, e -autocall 2 per averlo lavoro anche per le callables senza argomenti).

Problemi correlati