web-dev-qa-db-fra.com

Python 3 imprimer sans parenthèses

La print était autrefois une instruction dans Python 2, mais elle est désormais devenue une fonction nécessitant une parenthèse dans Python 3.

Est-il possible de supprimer ces parenthèses dans Python 3? Peut-être en redéfinissant la fonction d'impression?

Donc, au lieu de

print ("Hello stack over flowers")

Je pourrais taper:

print "Hello stack over flowers"
63
Laura

Bien que vous ayez besoin d'une paire de parenthèses pour imprimer dans Python 3, vous n'avez plus besoin d'un espace après print, car c'est une fonction. Donc, ce n'est qu'un seul caractère supplémentaire.

Si vous pensez toujours que taper une seule paire de parenthèses "prend inutilement du temps", vous pouvez utiliser p = print et enregistrer quelques caractères de cette façon. Comme vous pouvez lier de nouvelles références à des fonctions mais pas à des mots-clés, vous ne pouvez utiliser que ce raccourci print dans Python 3.

Python 2:

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

Python 3:

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

Cela rendra votre code moins lisible, mais vous économiserez ces quelques caractères à chaque fois que vous imprimez quelque chose.

20
TigerhawkT3

Le script AHK est une excellente idée. Pour ceux que ça intéresse, je devais changer un peu pour que ça marche pour moi:

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
3
TokyoMike

Non. Cela sera toujours une erreur de syntaxe dans Python 3. Pensez à utiliser 2to3 pour traduire votre code en Python 3.

2
holdenweb

Utiliser print sans parenthèses dans le code Python 3 n'est pas une bonne idée. N’est pas non plus créer des alias, etc. Si c’est un briseur d’accord, utilisez Python 2.

Cependant, print sans parenthèses peut être utile dans le shell interactif. Il ne s’agit pas vraiment de réduire le nombre de caractères, mais d’éviter d’appuyer deux fois sur la touche Maj chaque fois que vous souhaitez imprimer quelque chose pendant le débogage. IPython vous permet d’appeler des fonctions sans utiliser de parenthèses si vous démarrez la ligne avec une barre oblique:

Python 3.6.6 (default, Jun 28 2018, 05:43:53)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: var = 'Hello world'

In [2]: /print var
Hello world

Et si vous activez autocall, vous n'aurez même pas besoin de taper la barre oblique:

In [3]: %autocall
Automatic calling is: Smart

In [4]: print var
------> print(var)
Hello world
2
michau

Utilisez Autohotkey pour créer une macro. AHK est gratuit et simple à installer. www.autohotkey.com

Vous pouvez affecter la macro à, par exemple, alt-p:

!p::send print(){Left}

Cela fera que alt-p affichera print () et déplacera votre curseur à l’intérieur des parenthèses.

Ou, mieux encore, pour directement résoudre votre problème, vous définissez un remplacement automatique et limitez sa portée au moment où le fichier ouvert porte l'extension .py:

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

C'est une solution garantie, transparente et sans douleur.

2
Harry Binswanger

Vous ne pouvez pas le faire, car le seul moyen de le faire sans parenthèses est de le définir comme mot clé, comme dans Python 2. Vous ne pouvez pas définir manuellement un mot clé, alors non.

1
user3917838

Dans Python 3, l’impression est une fonction, alors qu’il s’agissait d’une déclaration dans les versions précédentes. Comme @holdenweb l'a suggéré, utilisez 2to pour traduire votre code.

0
SPKB24