Python Language Nozioni di base sulla formattazione delle stringhe


Esempio

foo = 1
bar = 'bar'
baz = 3.14

È possibile utilizzare str.format per formattare l'output. Le coppie di parentesi vengono sostituite con argomenti nell'ordine in cui vengono passati gli argomenti:

print('{}, {} and {}'.format(foo, bar, baz))
# Out: "1, bar and 3.14"

Gli indici possono anche essere specificati all'interno delle parentesi. I numeri corrispondono agli indici degli argomenti passati alla funzione str.format (basata su 0).

print('{0}, {1}, {2}, and {1}'.format(foo, bar, baz))
# Out: "1, bar, 3.14, and bar"
print('{0}, {1}, {2}, and {3}'.format(foo, bar, baz))
# Out: index out of range error

Gli argomenti con nome possono essere utilizzati anche:

print("X value is: {x_val}. Y value is: {y_val}.".format(x_val=2, y_val=3))
# Out: "X value is: 2. Y value is: 3."

Gli attributi degli oggetti possono essere referenziati quando vengono passati in str.format :

class AssignValue(object):
    def __init__(self, value):
        self.value = value
my_value = AssignValue(6)
print('My value is: {0.value}'.format(my_value))  # "0" is optional
# Out: "My value is: 6"

Le chiavi del dizionario possono essere utilizzate anche:

my_dict = {'key': 6, 'other_key': 7}
print("My other key is: {0[other_key]}".format(my_dict))  # "0" is optional
# Out: "My other key is: 7"

Lo stesso vale per gli indici list e tuple:

my_list = ['zero', 'one', 'two']
print("2nd element is: {0[2]}".format(my_list))  # "0" is optional
# Out: "2nd element is: two"

Nota: oltre a str.format , Python fornisce anche l'operatore modulo % - noto anche come operatore di formattazione o interpolazione della stringa (consultare PEP 3101 ) - per la formattazione delle stringhe. str.format è un successore di % e offre una maggiore flessibilità, ad esempio facilitando l'esecuzione di più sostituzioni.

Oltre agli indici argomento, puoi anche includere una specifica di formato all'interno delle parentesi graffe. Questa è un'espressione che segue regole particolari e deve essere preceduto da due punti ( : ). Vedi i documenti per una descrizione completa delle specifiche di formato. Un esempio di specifica di formato è la direttiva di allineamento :~^20 ( ^ indica allineamento centrale, larghezza totale 20, riempimento con carattere ~):

'{:~^20}'.format('centered')
# Out: '~~~~~~centered~~~~~~'

format consente un comportamento non possibile con % , ad esempio la ripetizione di argomenti:

t = (12, 45, 22222, 103, 6)
print '{0} {2} {1} {2} {3} {2} {4} {2}'.format(*t)    
# Out: 12 22222 45 22222 103 22222 6 22222

Poiché il format è una funzione, può essere utilizzato come argomento in altre funzioni:

number_list = [12,45,78]
print map('the number is {}'.format, number_list)
# Out: ['the number is 12', 'the number is 45', 'the number is 78']   
    

from datetime import datetime,timedelta
    
once_upon_a_time = datetime(2010, 7, 1, 12, 0, 0)
delta = timedelta(days=13, hours=8,  minutes=20)
    
gen = (once_upon_a_time + x * delta for x in xrange(5))
    
print '\n'.join(map('{:%Y-%m-%d %H:%M:%S}'.format, gen))
#Out: 2010-07-01 12:00:00
#     2010-07-14 20:20:00
#     2010-07-28 04:40:00
#     2010-08-10 13:00:00
#     2010-08-23 21:20:00