2010-05-28 13 views
5

dokumentacji Pythona określa, że ​​jest to legalne pominąć nawiasy jeśli funkcja przyjmuje tylko jeden parametr, aleCzy można wywołać funkcję pojedynczego parametru Pythona bez nawiasów?

myfunction "Hello!" 

generuje błąd składni. Więc jaka jest umowa?

(używam Python 3.1)

EDIT:

Stwierdzenie, że czytam odnosi się tylko do generator expressions:

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

Czy jesteś pewien? Czy możesz nam powiedzieć, gdzie czytasz tę zasadę? Czy mylisz się z rubinem? –

+1

Prawdopodobnie mylicie Python z Ruby lub Lua, gdzie czasami można pominąć paranthezy. – interjay

+2

@Jen: mówią o nawiasach, które oznaczają generator, a nie wywołanie funkcji. – SilentGhost

Odpowiedz

6

za edycję:

Jeśli piszesz w dół wyrażenie generatora, jak stuff = (f(x) for x in items) trzeba wsporniki, jak trzeba się [ .. ] wokół listowego.

Ale kiedy przekazujesz coś od wyrażenia generatora do funkcji (co jest dość powszechnym wzorcem, ponieważ jest to bardzo duża idea generatorów), wtedy nie potrzebujesz dwóch zestawów nawiasów - zamiast czegoś takiego jak s = sum((f(x) for x in items)) (wsporniki zewnętrzne wskazać wywołanie funkcji, wewnętrzną dla wyrażenia generatora) można po prostu napisać sum(f(x) for x in items)

2

bez nawiasów te nie byłyby functions ale statements lub keywords (język wewnętrzny).

This StackOverflow thread (z kilkoma bardzo miłymi odpowiedziami) contains a lead as na to, jak można tworzyć własne w czystym Pythonie (dzięki zaawansowanym hakerstwom, a nie jest to dobry pomysł w 99,99% przypadków).

0

Jak rozumiem zasada jest tylko o wyrażeniach prądotwórczych ... tak na przykład: suma (x 2 dla x w zakresie (10)), ale nadal trzeba by napisać: reduce (operator.add, (x 2 dla x w zakresie (10))).

Nie dotyczy to jednak ogólnych funkcji.

3

Można to zrobić z iPython - te -autocall steruje opcja wiersza polecenia tej funkcji (używanie -autocall 0 aby wyłączyć tę funkcję, -autocall 1, domyślny, aby mieć to działa tylko wtedy, gdy argument jest obecny, a -autocall 2 go mieć działa nawet dla osób bez argumentów).

Powiązane problemy