formatage des chaînes : f-strings¶
pour le formatage des chaines: utilisez les f-strings, qui évitent les répétitions fastidieuses
l’idée consiste à
faire précéder la chaine par un
fet embarquer directement dans la chaine des
{}qui peut contenir une expression Python (un nom de variable, ou plus élaboré)
et toute la partie dans le
{}sera remplacé par le résultat de l’expression
import mathnom, age = "Pierre", 42f"{nom} a {age} ans"'Pierre a 42 ans'f"360° = {2*math.pi} radians"'360° = 6.283185307179586 radians'f-string : expression et format¶
print(f"ᴨ arrondi à deux décimales = {math.pi:.2f}")ᴨ arrondi à deux décimales = 3.14
= dans une f-string¶
grâce au = optionnel, on peut obtenir en une seule fois un double affichage:
le code de l’expression
et la valeur de l’expression
# et c'est très pratique pour le debugging
def add(x, y):
return x+y
a, b = 10, 30
# c'est ici: ⬇
print(f"{add(a, b)=}")add(a, b)=40
formats - scientifiques¶
formats scientifiques usuels: e f et g, cf. printf
x = 23451.23423536563
f'{x:e} | {x:f} | {x:g} | {x:010.1f} | {x:.2f}''2.345123e+04 | 23451.234235 | 23451.2 | 00023451.2 | 23451.23'y = 769876.11434
f'{x:e} | {y:f} | {x:g} | {y:010.2f} | {x:.2f}''2.345123e+04 | 769876.114340 | 23451.2 | 0769876.11 | 23451.23'Voir aussi pour plus de détails:
https://
justification¶
pour faire de la justification, on dispose des formats < ˆ et >
f"|{nom:<12}|{nom:^12}|{nom:>12}|"'|Pierre | Pierre | Pierre|'# on peut aussi préciser avec quel caractère remplir
num = 123
f"|{num:<12}|{num:-^12}|{num:0>12}|"'|123 |----123-----|000000000123|'expression dans le format¶
un peu plus avancé, mais notez qu’on peut également utiliser des expressions dans le format
from decimal import Decimal
value = Decimal('12.34567')# ici la précision de 4
# signifie 4 chiffres
# significatifs en tout
f"value = >{value:10.4}<"'value = > 12.35<'# si nécessaire la précision
# peut aussi être un paramètre !
width = 10
precision = 4
f"value = >{value:{width}.{precision}}<"'value = > 12.35<'affichage avec print()¶
print(obj1, .., objn, sep=' ', end='\n',
file=sys.stdout, flush=False)affiche les objets obj convertis en chaînes de caractères
séparés par
sep(un espace par défaut)dans le fichier
file(sys.stdoutpar défaut)la ligne se termine par
end(un retour chariot par défaut)
enlever le newline¶
suppression du retour à la ligne automatique
for i in range(10):
print(i, end='')0123456789redirection dans un fichier¶
pour que
print()écrive sur le disque dur plutôt que dans le terminal
with open('test.txt', 'w') as channel:
L = list(range(10))
for item in L:
print(item, file=channel, end=' + ')
print("\n", file=channel)plusieurs paramètres¶
print(1, 'x', True)1 x True
print(1, 'x', True, sep='_')1_x_True
# dans un notebook ce n'est pas très parlant
# mais ici on n'obtiendrait PAS de retour à la ligne
print(1, 'x', True, sep='_', end='FIN')1_x_TrueFIN# et ici on en obtiendrait deux (soit une ligne blanche)
print(1, 'x', True, sep='_', end='\n\n')1_x_True
module logging (avancé)¶
pour le logging plus évolué qu’un simple print redirigé dans un fichier, on peut utiliser le module de la librairie standard
loggingdocumentation du module
tutorial
c’est la bonne façon de conserver des traces d’exécutionpour un programme en production
formatage : méthodes old-school¶
avant Python-3.6, il y a eu deux autres méthodes pour formatter
str.format()l’opérateur
%
il est recommandé d’utiliser les f-strings
mais les deux autres formes existent encore, a minima savoir les lire
formatage avec str.format() (old-school)¶
# anonyme (dans l'ordre)
print('We are the {} who say "{}!"'.format('knights', 'Ni'))We are the knights who say "Ni!"
# par index
print('{1} and {0} {0}'.format('spam', 'eggs'))eggs and spam spam
# par nom
print('This {food} is {adjective}'
.format(food='spam', adjective='absolutely horrible'))This spam is absolutely horrible
formatage avec % (very old-school)¶
encore plus ancienne méthode
nom = "Alice"
"%s dit bonjour" % nom'Alice dit bonjour'd = 3
"%i + %i = %i" % (d, d, d + d)'3 + 3 = 6'"%(food)s is %(adjective)s" % {'food' : 'bacon',
'adjective' : 'delicious' }'bacon is delicious'attention avec +¶
on peut être parfois tenté d’utiliser la concaténation
+
'abc' + 'def''abcdef'par contre attention, on ne peut concaténer que des
str, il faut convertir explicitement avecstr()
age = 35
try: 'alice a ' + age + ' ans'
except Exception as e: print ("OOPS", e)OOPS can only concatenate str (not "int") to str
'alice a ' + str(age) + ' ans''alice a 35 ans'