F-string (f-string)
Una cadena literal formateada (denominada cadena f) está precedida por f o F antes del comienzo de la cadena. En tal cadena, podemos hacer referencia a variables o expresiones de Python entre llaves {} .
Por ejemplo:
In [34]: site = 'learnPython'
In [35]: url = 'https://jficodigopara.blogspot.com/'
In [36]: f'The url of {site} is : {url}'
Out[36]: 'The url of learnPython is : https://jficodigopara.blogspot.com/'
In [37]: a, b = 10, 20
In [38]: f'the sum of {a} and {b} is {a+b}'
Out[38]: 'the sum of 10 and 20 is 30'
Las expresiones entre llaves {} pueden tener algunos especificadores de formato que se utilizan para controlar mejor cómo se formatean los valores. Por ejemplo, en el siguiente ejemplo, el número de punto flotante se reserva a tres lugares decimales:
In [39]: pi = 3.1415926
In [40]: f'pi is {pi:0.3f}'
Out[40]: 'pi is 3.142'
La expresión en la cadena de caracteres de arriba es seguida por un especificador de formato 0.3f que limita el número de lugares decimales.
Por ejemplo, el siguiente límite del ancho mínimo de caracteres permite que la salida permanezca alineada con la columna:
In [41]: persons = {'Tom': 23, 'Jack': 29, 'William': 20}
In [42]: for name, age in persons.items():
...: print(f'{name:10} : {age:5}')
...:
Tom : 23
Jack : 29
William : 20
El uso básico del método de formato proporcionado por la propia cadena es el siguiente:
In [53]: print('I am learning {} with {}'.format('Python', 'learnPython'))
I am learning Python with learnPython
A partir de este ejemplo, podemos ver que las llaves en la cadena se reemplazan por los parámetros que pasa el método de format , por lo que la cantidad de llaves debe ser la misma que la cantidad de argumentos pasados al format . Estrictamente hablando, la cantidad de llaves No puede exceder el número de parámetros pasados por format , de lo contrario, informará un error:
In [54]: print('I am learning {} with {}'.format('Python'))
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-54-11a586fa5126> in <module>
----> 1 print('I am learning {} with {}'.format('Python'))
IndexError: tuple index out of range
In [55]: print('I am learning {} with '.format('Python', 'learnPython'))
I am learning Python with
Las llaves pueden contener números que representan la ubicación del objeto pasado al método format() :
In [59]: print('{0} and {1}'.format('learn', 'Python'))
learn and Python
In [60]: print('{1} and {0}'.format('learn', 'Python'))
Python and learn
Si usa argumentos de palabras clave en el método format() , los nombres de los argumentos se usan para hacer referencia a sus valores:
In [62]: print('{name} is {age} years old'.format(
...: name='Tom', age=23))
Tom is 23 years old
Por supuesto, los parámetros de ubicación y palabras clave se pueden combinar para usar:
In [63]: print('the {0} of {1}, {name} is {age} years old'.format('story', 'Tom',
...: name='Tom', age=23))
the story of Tom, Tom is 23 years old
Podemos pasar un diccionario para format y usar corchetes [] para acceder a las teclas para completar el formateo:
In [80]: persons = {'Tom': 23, 'Jack': 29, 'William': 20}
In [81]: print('Tom:{0[Tom]:d}, Jack:{0[Jack]}, William:{0[William]:d}'.format(persons))
Tom:23, Jack:29, William:20
El 0[Tom]:d en las llaves significa que 0 representa el primer objeto pasado al format , es decir, persons ; [Tom] es para referirse al valor correspondiente a Tom primer objeto por la clave, es decir, 23 ; :d es un especificador de formato entero. Si Tom obtiene una cadena, obtendrá un error: el Unknown format code 'd' for object of type 'str' .
Aquí también puede usar ** para pasar el diccionario como un argumento de palabra clave:
In [82]: print('Tom:{Tom:d}, Jack:{Jack}, William:{William:d}'.format(**persons))
Tom:23, Jack:29, William:20
Usando el método de format , podemos generar fácilmente un número entero y su tabla cuadrada y cuadrada:
In [84]: for i in range(1, 10):
...: print('{0:2d} {1:3d} {2:3d}'.format(i, i*i, i*i*i))
...:
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
Formato manual de cadenas
El objeto str se puede formatear además del método str.format() , como:
Str.rjust () alinea a la derecha una cadena en un campo de un ancho determinado rellenando un espacio a la izquierda. De manera similar, str.ljust() está alineado a la izquierda y str.center() está alineado al centro.
In [89]: 'abcd'.rjust(6)
Out[89]: ' abcd'
In [90]: 'abcd'.rjust(3)
Out[90]: 'abcd'
Si la longitud de la cadena es menor que el valor pasado por rjust() , se rellenará con espacios en el lado izquierdo y devolverá una nueva cadena; si la longitud de la cadena es mayor o igual al valor pasado por rjust() , no se harán cambios. , devuelve la cadena como está.
También hay otro método: str.zfill() , que llena la cadena a la izquierda de la cadena, y para las cadenas numéricas reconoce el signo:
In [90]: 'abcd'.rjust(3)
Out[90]: 'abcd'
In [91]: 'abc'.zfill(10)
Out[91]: '0000000abc'
In [92]: '-3.14'.zfill(10)
Out[92]: '-000003.14'
In [93]: '12'.zfill(10)
Out[93]: '0000000012'
In [94]: '+12'.zfill(10)
Out[94]: '+000000012'
Formato de cadena antigua: método de formato%
En Python 2, el formato con el signo de porcentaje % es muy similar a sprintf() C. Sin embargo, en Python 3, es más recomendable usar el método str.format() o el formato de f-string . Así que aquí no hay más sobre % contenido formateado.
Resumen y práctica
En Python 3, se recomiendan dos métodos de formateo de cadenas: str.format() y formateo de f-string . Practique cómo usar estos dos métodos por separado.
留言
張貼留言