Hago esto en Python 2:
"(%d goals, $%d)" % (self.goals, self.penalties)
¿Cuál es la versión Python 3 de esto?
Intenté buscar ejemplos en línea, pero seguí obteniendo versiones de Python 2.
python
python-3.x
string
JoseBazBaz
fuente
fuente
Respuestas:
Aquí están los documentos sobre la sintaxis de formato "nuevo". Un ejemplo sería:
Si ambos
goals
ypenalties
son números enteros (es decir, su formato predeterminado es correcto), podría abreviarse a:Y dado que los parámetros son campos de
self
, también hay una forma de hacerlo usando un solo argumento dos veces (como @Burhan Khalid señaló en los comentarios):Explicando:
{}
significa solo el siguiente argumento posicional, con formato predeterminado;{0}
significa el argumento con índice0
, con formato predeterminado;{:d}
es el siguiente argumento posicional, con formato de entero decimal;{0:d}
es el argumento con índice0
, con formato de entero decimal.Hay muchas otras cosas que puede hacer al seleccionar un argumento (usar argumentos con nombre en lugar de posicionales, acceder a campos, etc.) y también muchas opciones de formato (rellenar el número, usar separadores de miles, mostrar signo o no, etc.). Algunos otros ejemplos:
Nota: Como señalaron otros, el nuevo formato no reemplaza al anterior, ambos están disponibles tanto en Python 3 como en las versiones más recientes de Python 2. Algunos pueden decir que es una cuestión de preferencia, pero en mi humilde opinión, el más nuevo es mucho más expresivo que el anterior, y debe usarse siempre que se escriba un código nuevo (a menos que se dirija a entornos más antiguos, por supuesto).
fuente
"({0.goals} goals, ${0.penalties})".format(self)
"conversion rate: {:.2%}".format(self.goals / self.shots)
:? Funciona bien para mí tal como está ... (Python 3.4) Tenga en cuenta que no hayf
en él, estoy pidiendo formatear como un porcentaje, no como un número de punto flotante."{:.2f}%".format(float_num)
funciona bien para ambos.$
no tiene un significado especial aquí, ni en la sintaxis del formato antiguo ni en el nuevo, por lo que debería estar presente en la cadena generada, sin cambios.Python 3.6 ahora admite la interpolación de cadenas literales abreviadas con PEP 498 . Para su caso de uso, la nueva sintaxis es simplemente:
Esto es similar al
.format
estándar anterior , pero permite hacer cosas como :fuente
Esa línea funciona como está en Python 3.
fuente
Me gusta este enfoque
Tenga en cuenta las dys adjuntas a los corchetes respectivamente.
la salida será:
fuente