English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Introducción detallada de la formato de cadena str.format en Python

Introducción

Python en 2.6 En la nueva versión se ha añadido un método de formateo de cadena: str.format(). Su sintaxis básica es reemplazar {} y : por % en el formato anterior.

sintaxis de sustituto de marcadores de posición durante la formateo:

replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

regla de "mapa"

A través de la posición

str.format() puede aceptar un número ilimitado de parámetros y los positions no tienen que seguir el orden:

>>> "{0} {1).format("hello", "world")
"hola mundo"
>>> "{0} {1}".format("hello", "world")
"hola mundo"
>>> "{1} {0} {1).format("hello", "world")
"mundo hola mundo"

A través de parámetros clave

Al usar parámetros clave, es necesario proporcionar el nombre del parámetro en la cadena:

>>> "Yo soy {name}, la edad es {age}".format(name="huoty", age=18)
"Soy huoty, mi edad es 18'
>>> user = {"name": "huoty", "age": 18}
>>> "Yo soy {name}, la edad es {age}".format(**user)
"Soy huoty, mi edad es 18'

A través de las propiedades del objeto

str.format() puede leer directamente las propiedades del usuario:

>>> class User(object):
...  def __init__(self, name, age):
...   self.name = name
...   self.age = age
...   
...  def __str__(self):
...   return "{self.name}({self.age})".format(self=self)
...  
...  def __repr__(self):
...   return self.__str__()
...  
...
>>> user = User("huoty", 18)
>>> user
huoty(18)
>>> "Soy {user.name}, mi edad es {user.age}".format(user=user)
"Soy huoty, mi edad es 18'

A través de índices

En una cadena de formato necesaria, se puede acceder a los elementos mediante índices:

>>> names, ages = ["huoty", "esenich", "anan"], [18, 16, 8]}
>>> "Soy {0[0]}, mi edad es {1[2]}".format(names, ages)
"Soy huoty, mi edad es 8'
>>> users = {"names": ["huoty", "esenich", "anan"], "ages": [18, 16, 8]}
>>> "Soy {names[0]}, mi edad es {ages[0]}".format(**users)

Especificar conversión

Se puede especificar el tipo de conversión de la cadena:

 conversion ::= "r" | "s" | "a"

Donde "!r" corresponde a repr(); "!s" corresponde a str(); "!a" corresponde a ascii(). Ejemplo:

>>> "repr() muestra comillas: {!r}; str() no prueba: {!s}".format('test1', 'test2')
"repr() muestra comillas: 'test1'; str() no prueba:2"

Símbolo de formato

Relleno y alineamiento

El relleno se utiliza a menudo junto con el alineamiento. ^, <, > representan centrado, alineado a la izquierda y alineado a la derecha, respectivamente. Después de la anchura, el símbolo : indica el carácter de relleno, que debe ser solo un carácter. Si no se especifica, se utiliza espacio en blanco por defecto.

>>> "{:>}8".format("181716)")
' 181716'
>>> "{:0>8".format("181716)")
"00181716'
>>> "{:->8".format("181716)")
'--181716'
>>> "{:-<8".format("181716)")
'181716--'
>>> "{:-^8".format("181716)")
'-181716-'
>>> "{:-<25}>".format("Here ")
"Here --------------------"

Precisión de flotante

Usar f para tipo de flotante y se puede agregar control de precisión antes de él:

>>> "[ {:.2f} ]".format(321.33345)
'[ 321.33 ]'
>>> "[ {:.1f} ]".format(321.33345)
'[ 321.3 ]'
>>> "[ {:.4f} ]".format(321.33345)
'[ 321.3335 ]'
>>> "[ {:.4f} ]".format(321)
'[ 321.0000 ]'

También se puede especificar el símbolo para números de coma flotante:+ Indica que se muestra antes de números positivos +Mostrando antes de números negativos -; (espacio) indica que se agrega un espacio antes de números positivos, y antes de números negativos se agrega -;- Es igual a nada más que ({:f}):

>>> '{:+f}; {:+f}'.format(3.141592657, -3.141592657)
'+3.141593; -3.141593'
>>> '{: f}; {: f}'.format(3.141592657, -3.141592657)
' 3.141593; -3.141593'
>>> '{:f}; {:f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:-f}; {:-f}'.format(3.141592657, -3.141592657)
'3.141593; -3.141593'
>>> '{:+.4f}; {:+.4f}'.format(3.141592657, -3.141592657)
'+3.1416; -3.1416'

Especificar el sistema de numeración

>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(18)
"int: 18; hex: 12; oct: 22; bin: 10010'
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(18)
"int: 18; hex: 0x12; oct: 0o22; bin: 0b10010'

Separador de miles

Se puede usar "," como separador de miles:

>>> '{:,}'.format(1234567890)
'1,234,567,890'

Visualización de porcentajes

>>> "progress: {:.2%".format(19.88/22)
"progress: 90.36%'

De hecho, format también admite más símbolos de tipo:

type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Otras técnicas

Anidación de placeholders

A veces, la anidación de placeholders es muy útil:

>>> '{0:{fill}{align}16}'.format("hello", fill='*', align='^')
'*****hello******'
>>>
>>> for num in range(5,12):
...for base in "dXob":
...   print("{0:{width}{base}}".format(num, base=base, width=}}5), end=' ')
...  print()
...  
...
 5  5  5 101
 6  6  6 110
 7  7  7 111
 8  8 10 1000
 9  9 11 1001
 10  A 12 1010
 11  B 13 1011

Usar como función

Puede no especificar los parámetros de formato y llamarlo como una función en lugares no deseados:

>>> email_f = "Tu dirección de correo electrónico fue {email}".format
>>> print(email_f(email="[email protected]"))
Tu dirección de correo electrónico fue [email protected]

Corchetes de escape

Cuando se necesita usar corchetes en una cadena, se pueden usar corchetes para escapar:

>>> "El conjunto {} se representa a menudo como {{0}}".format("vacío")
El conjunto vacío a menudo se representa como {0}

Resumen

Eso es todo el contenido de este artículo, espero que el contenido de este artículo pueda ayudar a algunos de ustedes en su aprendizaje o trabajo. Si tienen alguna pregunta, pueden dejar comentarios para intercambiar, gracias por su apoyo a Tutorial de Gritar.

Declaración: Este contenido ha sido proporcionado por la red, pertenece al autor original, ha sido subido por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w3Declaración: El contenido de este artículo se ha obtenido de la red, es propiedad del autor original, el contenido se ha contribuido y subido por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha realizado un procesamiento editorial humano y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w

Te gustará