Python >> Tutoriel Python >  >> Python

Comparaison de formatage de chaînes :format() | Pourcentage | f-chaîne

Résumé : f-string est plus lisible et plus facile à mettre en œuvre que % et .format() styles de formatage de chaîne. De plus, en utilisant f-strings est suggéré pour Python 3.6 et supérieur tandis que .format() est le mieux adapté à Python 2.6 et supérieur. Les versions antérieures à Python 2.6 ne fournissent que % option pour le formatage des chaînes. En termes de vitesse, % est le style de formatage de chaîne le plus rapide.

Aperçu

Problème : Comparez les différents styles de formatage de chaîne en Python, c'est-à-dire % Contre .format() Vs littéral de chaîne formatée/f-strings .

Présentation de la solution :Il existe 4 façons de formater une chaîne en Python à partir de maintenant. Ce sont

  1. % mise en forme
  2. str.format()
  3. f-string (Chaîne littérale)
  4. Chaînes de modèle

Exemple : Examinons l'exemple suivant dans lequel nous avons utilisé les quatre méthodes de formatage de chaîne :

from string import Template

name = "FINXTERS!"
print('1. Hello %s' % name)
print('2. Hello {}'.format(name))
print(f"3. Hello {name}")
temp = Template("4. Hello $name")
print(temp.substitute(name=name))

Sortie

1. Hello FINXTERS!
2. Hello FINXTERS!
3. Hello FINXTERS!
4. Hello FINXTERS!

Ainsi, à partir de l'exemple ci-dessus, nous voyons que tous les types de formatage de chaîne produisent la même sortie. Cela dit, nous avons maintenant beaucoup de questions à aborder. Certaines de ces questions incluent :

  • Quelle est la différence entre chaque méthode de formatage de chaîne ?
  • Quelle méthode de formatage de chaîne doit être préférée et dans quelle situation doit-elle être préférée ?

Pour en savoir plus sur l'utilisation de chaque formatage de chaîne Python, suivez ce tutoriel de blog. Cependant, dans cet article, nous apprendrons et nous nous concentrerons principalement sur les principales différences entre les trois premières méthodes de formatage de chaîne, comme mentionné dans notre énoncé du problème. Sans plus tarder, plongeons-nous dans les principales différences.

Avant d'approfondir ces méthodes, appliquons cet exercice rapide :

Exercice :Ajouter une seconde variable chaîne firstname et insérez-le dans chaque sortie !

Différence de syntaxe

Le tableau suivant décrit la différence de syntaxe entre chaque méthode de formatage de chaîne :

% formatage str.format() chaînes f
Syntaxe :
%variable
Syntaxe :
.format(valeur1, valeur2… )
Syntaxe :
f'
exemple :
nom ="FINXTERS !"
print('1. Bonjour %s' % nom)
exemple :
nom ="FINXTERS !"
print(‘2. Bonjour {}’.format(nom))
exemple :
nom ="FINXTERS !"
print(f'3. Bonjour {nom}')

Différence de version et de compatibilité

Le tableau suivant décrit la différence entre chaque style de formatage de chaîne en termes de compatibilité dans différentes versions de Python.

1. Introduit dans Python 2.6.
1. Introduit dans Python 3.6.
2. Il peut être utilisé dans Python 2.6 et supérieur. Cependant, il générera une erreur de syntaxe s'il est utilisé dans des versions antérieures à Python 2.6.
2. Peut être utilisé uniquement dans Python 3.6 et supérieur. Il déclenchera une erreur de syntaxe s'il est utilisé dans des versions antérieures à Python 3.6
% formatage str.format() chaînes f
1. Introduit dans la première/première version de Python.
2. Peut être utilisé dans n'importe quelle version de Python. Cependant, ce n'est pas un style de formatage de chaîne recommandé pour Python 2.6 et supérieur.

Différence fonctionnelle

% formatage str.format() chaînes f
% est un opérateur connu sous le nom d'opérateur modulo qui nous permet de formater un objet chaîne en Python. C'est une méthode intégrée qui nous permet de formater un objet chaîne en Python. f-string est une chaîne littérale en Python, avec 'f' comme préfixe et contient des expressions entre accolades.
Syntaxe complexe et peut accepter une variable ou un tuple.
Veuillez consulter Exemple 1 ci-dessous, pour avoir une meilleure vue de ce concept.
Étant un style de formatage de chaîne plus récent et amélioré, il est plus polyvalent et facile à utiliser que % . Il a une syntaxe plus simple et utilise une syntaxe similaire, que vous ayez besoin d'accepter une variable de chaîne ou un tuple.
Veuillez consulter Exemple 1 ci-dessous, pour avoir une meilleure vue de ce concept.
Il utilise une syntaxe encore plus simple depuis .format() peut devenir fastidieux, surtout lorsqu'il est utilisé avec de longues cordes. Veuillez consulter Exemple 1 ci-dessous, pour mieux appréhender ce concept.

C'est une option plus puissante de formatage de chaîne car elle nous permet d'intégrer des expressions dans la chaîne elle-même. Veuillez consulter Exemple 2 ci-dessous pour mieux comprendre ce concept.

Comparons les styles de formatage des chaînes en fonction de leur facilité de mise en œuvre à l'aide de quelques exemples :

Exemple 1

name = 'Finxter Shubham'
tup = (1, 2, 3)

# Different syntax for printing a string and tuple
print("Name: %s" % name)
print("Tuple: %s" % (tup,))

# same syntax to print both string and tuple
print("Name: {}".format(name))
print("Tuple: {}".format(tup))

# even more readable and easier syntax
print(f'Name: {name}')
print("Tuple: " f'{tup}')

Sortie

Name: Finxter Shubham
Tuple: (1, 2, 3)
Name: Finxter Shubham
Tuple: (1, 2, 3)
Name: Finxter Shubham
Tuple: (1, 2, 3)

f-strings conduisent à un code plus propre car leur syntaxe permet de placer la valeur d'une expression directement à l'intérieur d'une chaîne. L'exemple suivant montre comment intégrer facilement des expressions dans f-strings :

Exemple 2

# The number of units per player
units = {}
units['Alice'] = 10
units['Bob'] = 15
x = 'Alice'
y = 'Bob'
print(f'{x} has {units["Bob"] - units["Alice"]} units less than {y}')

Sortie

Alice has 5 units less than Bob

Pour savoir comment effectuer l'opération ci-dessus dans le .format() méthode de formatage de chaîne – cliquez ici !

► Maintenant, regardons un exemple qui illustre la facilité avec laquelle nous pouvons utiliser positionnel arguments en cas de .format() et f-strings mais comme ça devient hideux en faisant la même chose en utilisant % formatage.

Exemple 3

tu = (100, 500, 300)
print('{0} {2} {1}'.format(*tu))
print(f'{tu[0]}, {tu[2]}, {tu[1]}')

# using % formatting
print('%(a)s %(c)s %(b)s' % {'a': 100, 'b': 500, 'c': 300})

Sortie

100 300 500
100, 300, 500
100 300 500

► Un autre avantage des nouvelles méthodes de formatage de chaîne par rapport à % le formatage des chaînes est :- les nouveaux styles peuvent prendre des propriétés d'objet alors que % ne peut pas le faire. Examinons le code suivant pour voir le principe de fonctionnement derrière ce concept :

class Finxter(object):
    def __init__(self, a, b):
        self.x = a
        self.y = b


a = Finxter(2, 3)
print("\nUsing .format():")
print('Value1 = {0}\nValue2 = {1}'.format(a.x, a.y))
print("\nUsing f-string:")
print(f'Value1={a.x}\nValue2={a.y}')
print("\nNot possible using %")

Sortie

Using .format():
Value1 = 2
Value2 = 3

Using f-string:
Value1=2
Value2=3

Not possible using %

Différence de vitesse/performance

Bien que la vitesse et les performances ne soient pas les principales mesures en matière de formatage de chaîne, nous devons discuter de la différence entre elles en termes de performances car il peut y avoir une situation rare où la vitesse est également un critère dans le programme.

Jetons un coup d'œil au programme suivant pour découvrir qui remporte la course en termes de vitesse :

import timeit

print('.format() Speed:', timeit.timeit("'{}{}{}'.format(0.5, 1.5, 'SPEED TEST!')"))
print('% Speed:', timeit.timeit("'%s%s%s' % (0.5, 1.5, 'SPEED TEST!')"))
print('f-string Speed:', timeit.timeit("f'{0.5}{1.5}{\"SPEED TEST!\"}'"))

Sortie

.format() Speed: 1.615438
% Speed: 1.2333532999999999
f-string Speed: 1.2435527000000004

Par conséquent, nous voyons que % Le style de formatage de chaîne (modulo) remporte la course aux performances !

Cas d'utilisation qui convient à un style de formatage de chaîne spécifique

Des discussions ci-dessus, nous pouvons facilement déduire ce qui suit :

  • Si vous utilisez une version antérieure à Python 2.6, conservez l'ancien % (modulo) méthode de formatage de chaîne.
  • Si vous utilisez Python 2.6 ou supérieur, utilisez le .format() la méthode de formatage de chaîne est une meilleure option.
  • Si vous utilisez Python 3.6 ou une version ultérieure, la meilleure option pour le formatage des chaînes est f-string .

Si vous n'êtes pas sûr de la version de Python sur laquelle vous travaillez, vous voudrez peut-être consulter ce didacticiel.

Conclusion

Dans cet article, nous avons discuté des principales différences entre % , chaîneformat (), et f-strings basé sur de nombreux facteurs avec leurs exemples. J'espère qu'après avoir lu cet article, vous pourrez facilement comparer et contraster les différences entre chaque style de formatage de chaîne. Bien que les exemples utilisés dans l'article ci-dessus soient très basiques (pour une meilleure compréhension du concept), les mêmes contrastes sont également vrais dans le cas de situations complexes.

Si vous avez apprécié la lecture de cet article, abonnez-vous et restez à l'écoute pour d'autres articles intéressants !