字串格式的基礎知識
foo = 1
bar = 'bar'
baz = 3.14
你可以使用 str.format
格式化輸出。括號對將按引數傳遞的順序替換為引數:
print('{}, {} and {}'.format(foo, bar, baz))
# Out: "1, bar and 3.14"
索引也可以在括號內指定。這些數字對應於傳遞給 str.format
函式的引數的索引(從 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
也可以使用命名引數:
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."
傳遞給 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"
字典鍵也可以使用:
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"
同樣適用於 list 和 tuple 索引:
my_list = ['zero', 'one', 'two']
print("2nd element is: {0[2]}".format(my_list)) # "0" is optional
# Out: "2nd element is: two"
注意:除了
str.format
之外,Python 還提供了模運算子%
- 也稱為字串格式化或插值運算子 (參見 PEP 3101 ) - 用於格式化字串。str.format
是%
的繼承者,它提供了更大的靈活性,例如通過更容易進行多次替換。
除了引數索引之外,你還可以在大括號內包含格式規範。這是一個遵循特殊規則的表示式,必須以冒號(:
)開頭。有關格式規範的完整說明,請參閱文件 。格式規範的一個例子是對齊指令:~^20
(^
代表中心對齊,總寬度 20,填充〜字元):
'{:~^20}'.format('centered')
# Out: '~~~~~~centered~~~~~~'
format
允許%
無法實現的行為,例如重複引數:
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
由於 format
是一個函式,它可以在其他函式中用作引數:
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