Python 3 sin paréntesis

La print solía ser una statement en Python 2, pero ahora se convirtió en una función que requiere paréntesis en Python 3.

¿Hay alguna forma de suprimir estos paréntesis en Python 3? Tal vez al redefinir la función de impresión?

Entonces, en lugar de

 print ("Hello stack over flowers") 

Yo podría escribir:

 print "Hello stack over flowers" 

Aunque necesita un par de paréntesis para imprimir en Python 3, ya no necesita un espacio después de la print , porque es una función. Así que eso es sólo un único personaje extra.

Si aún encuentra que escribir un par de paréntesis es “innecesariamente lento”, puede hacer p = print y guardar algunos caracteres de esa manera. Como puede enlazar nuevas referencias a funciones pero no a palabras clave, solo puede hacer este acceso directo de print en Python 3.

Python 2:

 >>> p = print File "", line 1 p = print ^ SyntaxError: invalid syntax 

Python 3:

 >>> p = print >>> p('hello') hello 

Hará que su código sea menos legible, pero guardará esos pocos caracteres cada vez que imprima algo.

El script de AHK es una gran idea. Solo para aquellos interesados, necesito cambiarlo un poco para que funcione para mí:

 SetTitleMatchMode,2 ;;; allows for a partial search #IfWinActive, .py ;;; scope limiter to only python files :b*:print ::print(){Left} ;;; I forget what b* does #IfWinActive ;;; remove the scope limitation 

No. Eso siempre será un error de syntax en Python 3. Considere usar 2to3 para traducir su código a Python 3

No puedes, porque la única forma de hacerlo sin paréntesis es que sea una palabra clave, como en Python 2. No puedes definir manualmente una palabra clave, así que no.

Utilice Autohotkey para hacer una macro. AHK es gratis y fácil de instalar. http://www.autohotkey.com

Podría asignar la macro a, digamos, alt-p:

 !p::send print(){Left} 

Eso hará que alt-p ponga a print () y mueva el cursor hacia el interior de los parens.

O, mejor aún, para resolver su problema directamente , puede definir un lugar de almacenamiento automático y limitar su scope a cuando el archivo abierto tiene la extensión .py:

 #IfWinActive .py ;;; scope limiter :b*:print ::print(){Left} ;;; I forget what b* does. The rest should be clear #IfWinActive ;;; remove the scope limitation 

Esta es una solución garantizada, indolora, transparente.

En Python 3, imprimir es una función, mientras que solía ser una statement en versiones anteriores. Como @holdenweb sugirió, use 2to3 para traducir su código.

Finalmente descubrí la expresión regular para cambiar todo esto en los antiguos scripts de ejemplo de Python2. De lo contrario, utilice 2to3.py.

Pruébelo en Regexr.com, no funciona en NP ++ (?):

 find: (?<=print)( ')(.*)(') replace: ('$2') 

para variables:

 (?<=print)( )(.*)(\n) ('$2')\n 

Para etiqueta y variable:

 (?<=print)( ')(.*)(',)(.*)(\n) ('$2',$4)\n