Python >> Tutoriel Python >  >> Python

Fonction Python format() :Guide No-BS par exemple

Le Web est rempli de tutoriels de merde sur la fonctionnalité de formatage de Python. Parfois, cela peut devenir vraiment déroutant et il est difficile de voir la forêt pour les arbres. Dans ce didacticiel, je vais essayer de construire progressivement une compréhension de base du format() intégré fonction, ce qu'elle fait et comment vous pouvez l'utiliser pour devenir un codeur plus efficace.

Alors, commençons par la question la plus élémentaire :

Qu'est-ce que la fonction format() et pourquoi devriez-vous vous en soucier ?

Si vous êtes un scientifique des données, vous savez que le format des données est une étape de prétraitement critique. Voici quelques exemples où le formatage est requis :

  • Vous lisez les dates d'un fichier au format '11/9/2021' et vous voulez qu'ils aient le format '11/09/2021' .
  • Vous lisez les prix des maisons à partir d'une base de données et ils se présentent sous le format '1,000,000$' —et ce que vous voulez est :'$1,000,000' .
  • Vous devez construire une chaîne à partir de plusieurs variables entières mais vous n'aimez pas la concaténation de chaînes 'House' + str(num) + ' price is ' + str(price) + ' USD' —juste pour obtenir 'House 2 price is 10000 USD' .

Le format() vous fournit un outil puissant pour résoudre facilement tous ces défis. En fait, si vous maîtrisez le format() fonction, vous verrez que vous pouvez l'appliquer à de plus en plus de problèmes quotidiens.

Après tout, les programmeurs écrivent des programmes qui transforment une entrée en une sortie, c'est tout.

format(value, spec) intégré de Python La fonction transforme l'entrée d'un format en sortie d'un autre format défini par vous. Plus précisément, il applique le spécificateur de format spec à l'argument value et renvoie une représentation formatée de value . Par exemple, format(42, 'f') renvoie la représentation sous forme de chaîne '42.000000' .

Argumentation value La valeur à formater. Peut être une chaîne ou un entier ou tout autre objet implémentant le __format__() méthode.
Argumentation spec Le spécificateur de formatage pour contrôler comment la valeur doit être formatée. Utilise le mini-langage de spécification de format .
Valeur de retour string Renvoie la représentation formatée de value .

Apprendre format() par exemple

Maintenant, toutes ces informations sont très abstraites et cela ne signifie probablement pas grand-chose pour vous. Plongeons dans la fonctionnalité de formatage un exemple à la fois.

format() Entier

L'utilisation la plus basique de la fonction format consiste à lui transmettre une valeur entière :

>>> format(42)
'42'

La fonction de format se comporte exactement comme le str() intégré fonction qui convertit l'entier en chaîne. Vous pouvez déjà extraire les deux premières connaissances de cet exemple :

Perspicacité :La sortie du format() fonction est toujours une valeur de chaîne.

Perspicacité :Le premier argument du format() function est la valeur à formater.

Avez-vous assimilé les deux insights ?

format() pour convertir Int en flottant

Super, rendons-le un peu plus utile :vous voulez convertir la valeur entière 42 en une valeur flottante 42.0 . Pouvez-vous le faire avec le format() fonction? Bien sûr !

>>> format(42, 'f')
'42.000000'

Vous passez le deuxième argument optionnel 'f' qui s'appelle le spécificateur de format . Il existe tout un langage de spécification de format qui vous permet d'effectuer toutes sortes de transformations puissantes de votre valeur d'entrée. Le 'f' le spécificateur de format représente simplement l'objectif de formatage 'float' .

Perspicacité :Le deuxième argument de format() est le spécificateur de format .

Spécificateur de précision format()

Vous constatez que les nombreux zéros à la fin de '42.000000' ne sont pas jolis et sont trop précis pour vos besoins. Alors, comment réduire la précision ?

En ajoutant un préfixe de précision au spécificateur de format avec .p alors que p est la précision , c'est-à-dire le nombre de zéros après la virgule pour un nombre à virgule flottante.

>>> format(42, '.10f')
'42.0000000000'
>>> format(42, '.2f')
'42.00'

Cela a l'air plus joli! Et cela nous amène au prochain aperçu !

Perspicacité :Le .p préfixe dans le spécificateur de format contrôle la précision des nombres à virgule flottante.

spécificateurs de type importants format()

Il existe de nombreux spécificateurs de format de base tels que 'f' . Voici un tableau des plus importants, avec des exemples :

'b' >>> format(42, 'b')
'101010'

Format binaire. Affiche le nombre en base 2.
'd' >>> format(0b101010, 'd')
'42'
Format entier décimal . Étant donné un nombre dans une autre base (par exemple, binaire). Formate le nombre en base 10.
'e' >>> format(1000, '.2e')
'1.00e+03'
>>> format(1000, '.0e')
'1e+03'
Format d'exposant scientifique . Pour une précision donnée p , formate le nombre en notation scientifique avec la lettre 'e' séparant le coefficient de l'exposant.
'f' >>> format(42, '.10f')
'42.0000000000'
>>> format(42, '.2f')
'42.00'
Format à virgule fixe flottante. Pour une précision donnée p , formate le nombre sous forme de nombre décimal avec exactement p chiffres après la virgule. Par défaut, six positions après la virgule.

Ce sont les spécificateurs de format de base les plus importants. Pour une liste complète, veuillez consulter la documentation officielle. Sinon, restez avec moi pour en savoir plus sur les utilisations de la fonction de format !

Spécificateur de largeur format()

Supposons que vous exigez que votre sortie formatée ait une largeur spécifique . Par exemple, toutes les chaînes imprimées sur le shell doivent avoir une largeur de 25 positions. Pouvez-vous le faire avec format() ? Vous l'avez deviné :oui !

>>> format(42, '25f')
'                42.000000'
>>> format(42, '15f')
'      42.000000'

Pour définir la largeur de la sortie, ajoutez le nombre de chiffres en tant que préfixe au spécificateur de format :dans les exemples précédents, 25 chiffres et 15 chiffres, respectivement.

spécificateurs de combinaison format()

Vous pouvez également le combiner avec le spécificateur de précision comme suit :

>>> format(42, '15.2f')
'          42.00'
  • Le nombre entier 15 définit la largeur,
  • Le spécificateur de précision .2 définit le nombre de décimales, et
  • Le caractère 'f' contrôle le type de sortie (flottant).

Perspicacité :vous pouvez combiner plusieurs spécificateurs pour affiner votre format de sortie.

Alors, utilisons ceci pour bien aligner les flottants dans la sortie de votre shell Python :

# BEFORE
floats = [1.0,
          3.14,
          4.666,
          424242.424242]

for f in floats:
    print(f)
'''
1.0
3.14
4.666
424242.424242
'''

Et en utilisant le spécificateur de format pour embellir la sortie :

# AFTER
floats = [1.0,
          3.14,
          4.666,
          424242.424242]

for f in floats:
    print(format(f, '25.2f'))

'''
                     1.00
                     3.14
                     4.67
                424242.42
'''

Maintenant, les nombres sont bien alignés et ont tous le même nombre de chiffres après la virgule flottante.

Formulaire général du langage de spécification de format

Vous avez vu de nombreux exemples différents du spécificateur de format. Mais, formellement, comment cela fonctionne-t-il et comment pouvez-vous combiner tous ces éléments ?

Voici la syntaxe du langage formel du spécificateur format() de la documentation officielle :

format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill            ::=  <any character>
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Je sais qu'il est très difficile de saisir le sens de cette langue, mais restez avec moi un instant ! Tout d'abord, vous devez savoir que tout ce qui se trouve entre les crochets [...] est un élément de langage facultatif. Vous commencez par format_spec et remplacez-le ensuite par les éléments de langage facultatifs pour obtenir votre spécificateur de format final.

Par exemple, vous pouvez avoir un caractère de remplissage, suivi de l'élément align, suivi de la largeur, suivi du type :

format_spec -->
fill align width type -->
<any character> "<" | ">" | "=" | "^" digit+ "b"| ... | "%" -->
x=15f 
>>> format(42, 'x=15f')
'xxxxxx42.000000'
  • fill est remplacé par x pour remplir toutes les positions avec le caractère 'x' .
  • align est remplacé par = pour aligner la corde au centre plutôt qu'à droite ou à gauche.
  • width est remplacé par 15 pour que la chaîne entière soit sortie sur 15 positions de large.
  • type est remplacé par 'f' pour convertir l'entier 42 au flotteur 42.000000 .

format() contre string.format() contre __format__()

Le format(value, spec) intégré la fonction est similaire au string.format(spec) méthode—les deux appellent en interne le value.__format__() méthode. Cependant, le format() la fonction s'applique également aux valeurs non-chaîne.


Mais avant de continuer, je suis ravi de vous présenter mon nouveau livre Python Python One-Liners (Lien Amazon).

Si vous aimez les one-liners, vous allez adorer le livre. Il vous apprendra tout ce qu'il y a à savoir sur une seule ligne de code Python. Mais c'est aussi une introduction à l'informatique , science des données, apprentissage automatique et algorithmes. L'univers en une seule ligne de Python !

Le livre est sorti en 2020 avec l'éditeur de livres de programmation de classe mondiale NoStarch Press (San Francisco).

Lien :https://nostarch.com/pythononeliners

Vous voulez continuer à améliorer vos compétences Python ? Consultez nos feuilles de triche Python gratuites :