2010-05-28 13 views
5

documentación La pitón se especifica que es legal es omitir los paréntesis si una función sólo toma un único parámetro, pero¿Es posible llamar a la función Python de un solo parámetro sin usar paréntesis?

myfunction "Hello!" 

genera un error de sintaxis. Entonces, ¿cuál es el problema?

(estoy usando Python 3.1)

EDIT:

La afirmación de que leí sólo se aplica a generator expressions:

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

¿Estás seguro? ¿Puedes decirnos dónde lees esa regla? ¿Estás confundiendo con ruby? –

+1

Probablemente esté confundiendo Python con Ruby o Lua, donde a veces se pueden omitir las parantheses. – interjay

+2

@Jen: hablan sobre paréntesis que denotan generador, no la llamada de función. – SilentGhost

Respuesta

6

por tu edición:

Si anota un generador de expresión, como stuff = (f(x) for x in items) necesita los soportes, al igual que lo necesita el [ .. ] alrededor de una lista por comprensión.

Pero cuando pasa algo de una expresión de generador a una función (que es un patrón bastante común, porque esa es la gran idea detrás de los generadores) entonces no necesita dos conjuntos de corchetes, en lugar de algo como s = sum((f(x) for x in items)) (soportes exteriores para indicar una llamada de función, interno para la expresión generador) se puede escribir sum(f(x) for x in items)

2

sin paréntesis los que no habría functions pero statements o keywords (lenguaje-intrínseco).

This StackOverflow thread (con algunas respuestas muy buenas) contains a lead as a cómo se puede crear uno propio en Python puro (a través de hackers avanzados, y no es una buena idea en el 99,99% de los casos).

0

Según entiendo la regla es sólo acerca de las expresiones generadoras ... así por ejemplo: suma (x 2 para x en el rango (10)), pero igual tendría que escribir: reducir (operator.add, (x 2 para x en el rango (10))).

Esto no se aplica a las funciones genéricas.

3

Puede hacerlo con iPython - -autocall los controles de opciones de línea de comandos esta característica (-autocall 0 utilizar para desactivar la función, -autocall 1, el valor por defecto, para hacer que funcione sólo cuando un argumento está presente, y -autocall 2 tenerlo funciona incluso para callables sin argumento).

Cuestiones relacionadas