Résumé des méthodes d'implémentation du formatage de chaîne en Python

高洛峰
Libérer: 2017-02-21 17:01:26
original
1384 Les gens l'ont consulté

Python2.6 ajoute la fonction str.format pour remplacer l'opérateur '%' d'origine. Son utilisation est plus intuitive et flexible que '%'. Voici une introduction détaillée sur la façon de l'utiliser.

Ce qui suit est un exemple d'utilisation de '%' :

""
"PI is %f..." % 3.14159 # => 'PI is 3.141590...'
"%d + %d = %d" % (5, 6, 5+6) # => '5 + 6 = 11'
"The usage of %(language)s" % {"language": "python"} # => 'The usage of python'
Copier après la connexion

Le format est très similaire à printf en langage C non ? Puisque « % » est un opérateur, un seul paramètre peut être placé à gauche et à droite. Par conséquent, plusieurs valeurs à droite doivent être incluses dans les tuples ou les dictionnaires. Les tuples et les dictionnaires ne peuvent pas être utilisés ensemble, ce qui manque de flexibilité. .

Le même exemple est réécrit en utilisant la méthode format :

"PI is {0}...".format(3.14159) # => 'PI is 3.14159...'
"{0} + {1} = {2}".format(5, 6, 5+6) # => '5 + 6 = 11'
"The usage of {language}".format(language = "Python") # => 'The usage of Python'
Copier après la connexion

N'est-ce pas très intuitif ? (Bien sûr, j'aime aussi l'ancienne expression de format lorsque j'utilise le langage C :-) )

Chaîne de format

"{named} consist of intermingled character {0} and {1}".format("data", "markup", \
  named = "Formats trings")
format(10.0, "7.3g") # => '   10'
"My name is {0} :-{{}}".format('Fred') # => 'My name is Fred :-{}'
Copier après la connexion

Faites attention au '' dans la première ligne. Si une instruction doit être nouvelle ligne, elle doit être échappée avec une barre oblique inverse à la fin.

En utilisant '%', vous ne pouvez pas mélanger des tuples et des dictionnaires comme celui-ci. En fait, il s'agit d'un paramètre nommé, une fonctionnalité de Python. Vous pouvez utiliser la syntaxe *args, **kwargs pour développer des collections et des dictionnaires lors de la définition de tableaux. Il est à noter que les paramètres nommés sont placés à la fin.

La deuxième instruction indique que la fonction intégrée format est utilisée pour formater une seule valeur.

La troisième instruction représente l'échappement de {}, car {} est un caractère spécial dans la chaîne formatée et ne peut pas être affiché directement. La méthode d'échappement consiste à imbriquer un niveau de plus.

Utiliser des attributs et des index

"My name is {0.name}".format(open('out.txt', 'w')) # => 'My name is out.txt'
Copier après la connexion

'{0.name}' équivaut à appelant L'attribut de l'objet open('out.txt', 'w').name

"My name is {0[name]}".format(dict(name='Fred')) # => 'My name is Fred'
Copier après la connexion

peut également être indexé.

obj[key] est équivalent à obj.____getitem____('key')

Spécificateurs standards (Spécificateurs)

Écrit en C Les programmeurs de langage doivent être conscients de la complexité de printf. format définit également un certain nombre de spécificateurs standard utilisés pour interpréter le format d'une valeur, puis l'insérer dans la chaîne. Par exemple :

"My name is {0:8}".format('Fred') # => 'My name is Fred  '
Copier après la connexion

':' est suivi du spécificateur. Dans l'exemple ci-dessus, il n'y a qu'un seul « 8 » (largeur minimale). ) spécificateur Cela signifie que la largeur de la valeur insérée est d’au moins 8. "Fred" n'en a que 4, donc 4 espaces supplémentaires sont ajoutés. Le format détaillé du spécificateur

est :

[[fill]align][sign][#][0][minimumwidth][.precision][type] (pas plus concis que le printf de C !)

Remarque : '[]' Indique que l'élément est facultatif. Par conséquent, tous les spécificateurs de format sont facultatifs ! Comme les exemples précédents, ceci n’est presque jamais utilisé (juste pour rendre l’exemple plus clair). En fait, ceux-ci sont très utiles.

Regardons-les un par un :
1. [fill]align signifie arrangement. Lorsque la largeur minimale est supérieure à la valeur insérée, il y a un espace vide, comme « Je m'appelle Fred » dans l'exemple précédent. Par défaut, l'espace est placé à droite, ce qui signifie que la valeur insérée est alignée à gauche par défaut. Si nous essayons {0:>8}, nous constaterons que le résultat devient « Je m'appelle Fred ».
fill représente les caractères utilisés pour remplir l'espace vide. Fill n'est utile que si align est spécifié ! align peut être l'identifiant suivant :

  • < aligné à gauche, par défaut

  • >

    = Placez un espace vide après la marque d'alignement, qui n'est valable que pour les nombres. Qu'est-ce que ça veut dire? Comme nous le verrons ci-dessous, align affiche les signes positifs et négatifs des nombres, ce qui n'est également valable que pour les nombres. Si '=' est spécifié, les signes positifs et négatifs du nombre seront affichés devant l'espace vide. Par exemple : format(-12, "0=8") # => '-0000012' Notez que le format de fonction intégré qui formate une seule valeur est utilisé ici. « 0 » est l'élément de remplissage, qui est utilisé pour remplir l'espace vide ; « = » est la marque ; « 8 » signifie que la largeur minimale est de 8, il n'y a donc que 5 espaces vides. Et l’alignement ? align décrit en fait la méthode d'affichage des signes plus et moins. Le « - » par défaut est utilisé ici, qui sera discuté plus tard.
  • ^ Alignement central
  • 2. signer le symbole numérique, valable uniquement pour les chiffres.

Afficher les signes plus et moins
  • - Ne pas afficher le signe plus, afficher le signe moins. Sans spécifier de largeur minimale, les nombres négatifs occupent toujours une position de symbole de plus que les nombres positifs. Par défaut
  • ' ' (un espace) Utilisez un espace vide pour remplacer le signe plus
  • 3. le système décimal ( 0b, 0o, 0x)

4. 0 Remplissez l'espace vide avec '0'.

5. minimumwidth spécifie la largeur minimale et a été utilisé plusieurs fois.

6. précision « précision » est un nombre décimal, indiquant le nombre de décimales à afficher.

7. type Type de valeur :

① Type entier :

b Binaire
  • type de caractère c, convertit les nombres en caractères représentant unicode
  • d décimal
  • o octal
  • x hexadécimal, afficher les lettres minuscules
  • X hexadécimal, afficher les lettres majuscules
  • n avec le comportement d Idem, utiliser la représentation numérique locale
  • '' (vide, sans espaces) Identique à d
  • ②Numéro à virgule flottante
    • e 科学计数法表示,小写e

    • E 科学计数法表示,大写E

    • f 显示为定点数,默认小数点后六位

    • F 同f

    • g 自动选择是否用科学记数法表示

    • G 同g

    • n 同g,使用本地表示方式

    • % 使用百分比表示

    • ''(空) 同g

    每个对象可以重写自己的格式化说明符,例如datatime类重写了后可以这样表示:

    "Today is: {0:%a %b %d %H:%M:%S %Y}".format(datetime.now())
    Copier après la connexion

    预先转换

    ':'之后是格式说明符,之前还可以加预先转换的标识

    • !r 调用对象的_repr_方法来转换成标准字符串

    • !s 调用对象的_str_方法来转换成字符串

    重写_format_方法

    我们在格式化一个字符串时,首先格式化每个值,然后再插入字符串内。格式化值调用的就是format内置方法。format则是简单地调用该值的_format_方法。

    def format(value, format_spec):
      return value.__format__(format_spec)
    Copier après la connexion

    在object类内实现了_format方法,只是将本身用str()转换成字符串,然后将字符串传入内置的format方法,实际上就是调用转换为字符串后的format_方法。

    class object:
      def __format__(self, format_spec):
        return format(str(self), format_spec)
    Copier après la connexion

    int/float/str自身实现了_format_方法,前面已经介绍了它们各自的说明符。

    结束语

    还有一点儿是自定义Formatter,不过平常也用不到。留作下篇string模块源码解读的内容吧。建议有兴趣的朋友多看看Python标准库的源码,很有学习价值。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

    更多Python实现字符串格式化的方法小结相关文章请关注PHP中文网!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal