web-dev-qa-db-fra.com

Comment imprimer comme printf en Python3?

En Python 2, j'ai utilisé:

print "a=%d,b=%d" % (f(x,n),g(x,n))

J'ai essayé:

print("a=%d,b=%d") % (f(x,n),g(x,n))
98
Mike L

Dans Python2, print était un mot clé qui introduisait une déclaration:

print "Hi"

En Python3, print est une fonction qui peut être appelée:

print ("Hi")

Dans les deux versions, % est un opérateur qui requiert une chaîne à gauche et une valeur ou un tuple de valeurs ou un objet de mappage (comme dict) à droite.

Ainsi, votre ligne devrait ressembler à ceci:

print("a=%d,b=%d" % (f(x,n),g(x,n)))

En outre, la recommandation pour Python3 et les versions plus récentes consiste à utiliser la mise en forme de style {}- au lieu de la mise en forme de style %-:

print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))

Python 3.6 introduit un autre paradigme de formatage de chaîne: f-strings .

print(f'a={f(x,n):d}, b={g(x,n):d}')
172
Robᵩ

La méthode la plus recommandée consiste à utiliser la méthode format. En savoir plus à ce sujet ici

a, b = 1, 2

print("a={0},b={1}".format(a, b))
45
thefourtheye

Fonction printf () simple de Livre de recettes en python d’O'Reilly .

import sys
def printf(format, *args):
    sys.stdout.write(format % args)

Exemple de sortie:

i = 7
pi = 3.14159265359
printf("hi there, i=%d, pi=%.2f\n", i, pi)
# hi there, i=7, pi=3.14
20

Python 3.6 a introduit les chaînes de caractères f pour l’interpolation en ligne. Ce qui est encore plus agréable, c'est que la syntaxe a été étendue pour autoriser également les spécificateurs de format avec interpolation. Quelque chose sur lequel j'ai travaillé pendant que je cherchais sur Google (et suis tombé sur cette vieille question!):

print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')

PEP 498 a les détails. Et ... il a trié ma bête noire avec des spécificateurs de format dans d'autres langues - permet d'utiliser des spécificateurs qui peuvent être eux-mêmes des expressions! Yay! Voir: Spécificateurs de format .

16
kva1966

Un plus simple.

def printf(format, *values):
    print(format % values )

Ensuite:

printf("Hello, this is my name %s and my age %d", "Martin", 20)
8
Famory Toure

Comme votre % est en dehors des parenthèses print(...), vous essayez d'insérer vos variables dans le résultat de votre appel print. print(...) renvoie None, donc cela ne fonctionnera pas, et il est également peu probable que vous ayez déjà imprimé votre modèle à ce moment-là et que tout voyage dans le temps soit interdit par les lois de l'univers que nous habitons.

Tout ce que vous voulez imprimer, y compris le % et son opérande, doit être à l'intérieur votre appel print(...), afin que la chaîne puisse être créée avant son impression.

print( "a=%d,b=%d" % (f(x,n), g(x,n)) )

J'ai ajouté quelques espaces supplémentaires pour le rendre plus clair (même s'ils ne sont pas nécessaires et ne sont généralement pas considérés comme un bon style).

3
kindall

D'autres mots printf absents en python ... ça me surprend!

def printf(format, *args):
    sys.stdout.write(format % args)

En raison de ce formulaire permet de ne pas imprimer\n. Tous les autres non. C'est pourquoi l'impression est un mauvais opérateur. Et vous devez aussi écrire des arguments sous une forme spéciale. Il n'y a pas d'inconvénients dans la fonction ci-dessus. C'est une forme standard habituelle de la fonction printf.

1
Anatoliy
print("Name={}, balance={}".format(var-name, var-balance))
0
User707