2010-05-28 16 views
5

Die Python Dokumentation gibt an, dass legal ist, um die Klammern wegzulassen, wenn eine Funktion eines einzelnen Parameters erfolgt nur, aberMöglich, Python-Funktion mit einem Parameter ohne Klammern zu verwenden?

myfunction "Hello!" 

erzeugt einen Syntaxfehler. Also, was ist der Deal?

(Ich bin mit Python 3.1)

EDIT:

Die Aussage, dass ich nur gelesen gilt für generator expressions:

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

Sind Sie sicher? Können Sie uns sagen, wo Sie diese Regel gelesen haben? Verwechseln Sie Ruby? –

+1

Vermutlich verwechseln Sie Python mit Ruby oder Lua, wobei Parantheses manchmal weggelassen werden können. – interjay

+2

@Jen: Sie sprechen über Klammern, die Generator, nicht den Funktionsaufruf bezeichnen. – SilentGhost

Antwort

6

Für Ihre edit:

Wenn Sie einen Generator Ausdruck aufschreiben, wie stuff = (f(x) for x in items) Sie die Klammern müssen, so wie du die [ .. ] um eine Liste Verständnis brauchen.

Aber wenn Sie etwas von einem Generatorausdruck an eine Funktion übergeben (was ein ziemlich allgemeines Muster ist, weil das ziemlich die große Idee hinter Generatoren ist), dann brauchen Sie nicht zwei Sätze von Klammern - anstelle von etwas wie s = sum((f(x) for x in items)) (äußeree Klammern einen Funktionsaufruf, um anzuzeigen, Innen für den Generator Ausdruck), die Sie gerade sum(f(x) for x in items)

2

ohne Klammern diejenigen, die nicht functions wäre aber statements oder keywords (sprachintern).

This StackOverflow thread (mit einigen sehr netten Antworten) contains a lead as, wie man ihre eigenen in reinem Python erstellen kann (durch erweiterte hackery, und nicht eine gute Idee, in 99,99% der Fälle).

0

schreiben können, wie ich die Regel verstehe nur über den Generator Ausdrücke ist ... so zum Beispiel: Summe (x 2 x im Bereich (10)), aber Sie müssten immer noch schreiben: reduzieren (operator.add, (x 2 für x in Bereich (10))).

Dies gilt jedoch nicht für generische Funktionen.

3

Sie können es mit iPython - die -autocall Befehlszeilenoption steuern diese Funktion (verwenden -autocall 0 die Funktion zu deaktivieren, -autocall 1, den Standard, es zu haben, funktioniert nur, wenn ein Argument vorhanden ist, und -autocall 2 es zu haben arbeiten sogar für streitbare Anrufer.

Verwandte Themen