[PY3]——內建資料結構(4)——字串格式化(format)

Jelly_lyj發表於2017-03-18

字串格式化是拼接字串的一種手段

join和+拼接字串的方法,難以控制格式

printf style 字串格式化

這種方法是從c語言繼承過來的

# 待格式化的字串:一個字串存在佔位符
In [1]: s='i love %s'

# 傳入的引數順序地替換佔位符,並返回替換之後的字串,但原串不變
In [2]: s % ('python',)
Out[2]: 'i love python'
In [3]: s
Out[3]: 'i love %s'

# 傳入的引數和佔位符個數不匹配、或傳入的引數和型別不匹配,則丟擲TypeError
In [4]: 'i love %s,i am %d' % ('python',22)
Out[4]: 'i love python,i am 22'

In [5]: 'i love %s,i am %d' % ('python',)
TypeError: not enough arguments for format string

In [6]: 'i love %s,i am %d' % ('python','sfc')
TypeError: %d format: a number is required, not str

In [11]: print('%s %%d' % 'python')
python %d

 

format

# 使用大括號作為佔位符,呼叫format時其傳入的引數會替換大括號
In [3]: s='i love {},i am {}';s.format('python',18)
Out[3]: 'i love python,i am 18'

# 可以在佔位符中加數字來指定傳入哪個引數,並且該位置引數可以多次使用
In [4]: s='i love {1},i am {0}';s.format(18,'python')
Out[4]: 'i love python,i am 18'

In [5]: s='i love {1},i am {1}';s.format(18,'python')
Out[5]: 'i love python,i am python'

In [19]: '{0},{1},{2}'.format(*'abc')
Out[19]: 'a,b,c'


# 可以在佔位符中加識別符號來指定關鍵字引數,並且關鍵字引數和位置引數可以同時使用
In [7]: s='my name is {0},i love {lang},i am {age}';s.format('jelly',lang='python',age=18)
Out[7]: 'my name is jelly,i love python,i am 18'

# 什麼時候會丟擲異常?
# {}       是按照順序來使用位置引數,那麼當佔位符和引數個數不匹配則丟擲異常
# {數字i}   會把傳入的引數當成一個列表args,使用位置引數i索引(args[i])。當i不是args的索引時丟擲IndexError。
# {關鍵字k} 會把關鍵字引數當成一個字典kwargs,使用kwargs[k]。當k不是kwargs的key時,會丟擲KeyError異常。

In [10]: '{} {}'.format(88)
------------------------------------------------------
IndexError           Traceback (most recent call last)
<ipython-input-10-569fb0faf265> in <module>()
----> 1 '{} {}'.format(88)

IndexError: tuple index out of range

In [11]: '{} {lang}'.format(88)
------------------------------------------------------
KeyError             Traceback (most recent call last)
<ipython-input-11-8286ca2a6881> in <module>()
----> 1 '{} {lang}'.format(88)

KeyError: 'lang'

In [12]: '{1},{2},{3}'.format('a','b','c')   
#分析:args=[a,b,c],args[i=1]='b',args[i=2]='c',args[i=3]=?故丟擲IndexError
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-5-bedd884b41e7> in <module>()
----> 1 '{1},{2},{3}'.format('a','b','c')

IndexError: tuple index out of range

 

 

 

 




相關文章