天天看點

python 字元串格式化表達式

'''
格式化字元串
在%操作符的左側放置一個需要進行格式化的字元串,這個字元串帶有一個或多個嵌入的轉換目标,都以%開頭(例如:%d)
在%操作符的右側放置一個(或多個,嵌入到元組中)對象,這些對象将會插入到左側想讓python進行格式化字元串的一個(或多個)轉換目标的位置上去

轉換目标的通用結構:%[(name)][flags][width][.precision]typecode

在%和字元碼之間可以進行以下的任何操作:
放置一個字典的鍵;
羅列出左對齊(-),正負号(+)和補零(0)的标志位;
給出數字的整體長度和小數點後的位數等
'''
print('that is %d %s bird'%(1,'dead'))
s='Ni'
print('the knights who say %s'% s)
print('%d %s %d you'%(1, 'spam', 4))
print('%s -- %s -- %s'%(42,3.14159,[1,2,3]))  #整數,浮點數和清單都被轉換成了字元串

x=1234
y=-1234
z=1234567
print('integers: ...%d...'% x)    # integers: ...1234...
print('integers: ...%6d...'% x)    #寬度6位,預設右對齊    integers: ...  1234...
print('integers: ...%-6d...'% x)    #寬度6位,左對齊    integers: ...1234  ...
print('integers: ...%+6d...'% x)    #顯示正負号    integers: ... +1234...
print('integers: ...%+6d...'% y)    #顯示正負号    integers: ... -1234...
print('integers: ...%+6d...'% y)    #顯示正負号    integers: ... -1234...
print('integers: ...%06d...'% x)    #補零湊6位    integers: ...001234...
print('integers: ...%06d...'% z)    #補零湊6位    integers: ...1234567...

x=111.23456789
print('%e' % x)    #1.112346e+02
print('%E' % x)    #1.112346E+02
print('%f' % x)    #111.234568  預設6位小數
print('%g' % x)    #111.235   預設小數點前後加起來最多6位
print('...%-7.2f...' % x)    #...111.23 ...  保留小數點兩位,顯示寬度7,左對齊
print('...%07.2f...' % x)    #...0111.23...  保留小數點兩位,顯示寬度7,補零
print('...%+7.1f...' % x)    #... +111.2...  保留小數點一位,顯示寬度7,顯示正負号

#如果在運作的時候才知道數字大小的話,則可以在格式化字元串中用一個*來指定通過計算得出width和percision,進而迫使他們的值從%運算符右邊的輸出中的下一項擷取
print('%f, %.2f, %.*f' % (1/3.0, 1/3.0, 4, 1/3.0))    #元組中的4指定為precision   #0.333333, 0.33, 0.3333

#基于字典的字元串格式化
#字元串格式化同時允許左邊的轉換目标來引用右邊字典中的鍵來提取對應的值
print('%(n)d %(x)s'%{"n":1,"x":"spam"})  #n和x引用了右邊字典中的鍵,并提取他們相應的值 1 spam
reply="""
Greetings...
hello %(name)s!
Your age squared is %(age)s
"""
values={'name':'Bob', 'age':40}
print(reply % values)

#配合vars()函數使用
food='spam'
age=40
print(vars())   #傳回字典包含了所有在本函數調用時存在的變量
print('%(age)d %(food)s' % vars())   #40 spam      
python 字元串格式化表達式
python 字元串格式化表達式