0、Python之.format()方法
format():格式化輸出,是Python2.6新增的格式化字符串的方法,把傳統的%替換爲{}來實現格式化輸出(%:格式化操作符),相對於老版的%格式方法,有很多的優點。
優點:
1.format()不需要理會數據類型的問題;在%方法中%s只能替代字符串類型。
2.單個參數可以多次輸出,參數順序可以不相同。
3.填充方式十分靈活,對齊方式十分強大。
4.官方推薦使用的方式
format()後面的內容,填入大括號{}中(其中{}花括號表示replacement字段),format()可以接受2種參數:位置參數、變量(關鍵字)參數,均傳遞到replacement字段。
按位置參數
1.參數按照位置的順序填充到字符串中,第一個參數是0,然後是1,2,3.......
>>> '{0} love {1}.{2}'.format('I','Fishc','com') #前面的字符串調用format()方法
'I love Fishc.com'
>>> '{1} love {0}.{2}'.format('I','Fishc','com') #注意位置的替換
'Fishc love I.com'
>>>
2.不輸入數字,直接按照順序來填充
>>> '{} love {}.{}'.format('I','Fishc','com')
'I love Fishc.com'
>>>
>>> #需要輸出{},可以用{{}},即{}對自己轉義
>>> '{{{0} love {1}}}'.format('I','you')
'{I love you}'
>>>
>>> #一個位置參數可以使用2次
>>> '{{{1} love {0}.{1}}}'.format('fishc','I')
'{I love fishc.I}'
>>>
按關鍵字參數
>>> #按照關鍵字參數,format()中要具體寫明參數對應的值
>>> '{a} love {b}.{c}'.format('I','Fishc','com')
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
'{a} love {b}.{c}'.format('I','Fishc','com')
KeyError: 'a'
>>> '{a} love {b}.{c}'.format(a = 'I',b = 'Fishc',c = 'com')
'I love Fishc.com'
>>>
綜合位置參數、關鍵字參數(位置參數必須在關鍵字的前面,否則就是錯誤的)
>>> #綜合 位置參數和關鍵字參數
>>> '{0} love {b}.{c}'.format('I',b = 'Fishc',c = 'com')
'I love Fishc.com'
>>> '{a} love {b}.{0}'.format(a = 'I',b = 'Fishc','com')
SyntaxError: positional argument follows keyword argument
>>>
一、基本字符串操作
字符串都是不可變的。如下所示的項或者分片賦值都是不合法的:
>>> website = 'http://www.baidu.com'
>>> website[-3:]='org'
Traceback (most recent call last):
File "<pyshell#125>", line 1, in <module>
website[-3:]='org'
TypeError: 'str' object does not support item assignment
>>>
二、字符串格式化
表:字符串格式化轉換類型
符號 說 明
%c 格式化字符及其ASCII碼
%s 格式化字符串
%d 格式化整數
%o 格式化無符號八進制數
%x 格式化無符號十六進制數
%X 格式化無符號十六進制數(大寫)
%f 格式化定點數,可指定小數點後的精度
%e 用科學計數法格式化定點數
%g 根據值的大小決定使用%f或者%e
%G 根據值的大小決定使用%F或者%E
字符串的格式化使用的是:字符串格式化操作符%
轉換說明符%s 、%d、%x等表示:需要插入轉換值的位置。
轉換方法:左操作數 % 右操作數
格式化操作符的右操作數可以是任意類型,右操作數是元組,元組的每一個元素都會被單獨格式化
>>> '%s + %s =%s' % (4,5,4+5)
'4 + 5 =9'
>>>
>>> '%s love fishc' % 'I'
'I love fishc'
>>>
>>> format = 'Hello,%s.%s is beautiful'
>>> values = ('world','Flower') #用元組的形式
>>> format % values
'Hello,world.Flower is beautiful'
>>>
基本的轉換說明符
(1)%字符:標記轉換說明符的開始。
(2)轉換標誌:-表示左對齊
+表示在轉換值之前加上正號
‘ ’空格表示在正數之前保留空格
0表示在轉換數若位數不夠用0填充
(3)字段寬度:轉換後的字符串指定出字段寬度
(4).(點)後跟精度值:如果轉換的是實數,精度值就表示出現在小數點後的位數。
(一)簡單轉換
>>> '%s + %s ==%s' % (4,5,4+5)
'4 + 5 ==9'
>>> '%s + %s =%s' % (4,5,4+5)
'4 + 5 =9'
>>> 'price is :$%d' % 42
'price is :$42'
>>> 'price is :%x' % 42
'price is :2a'
>>> from math import pi
>>> 'pi is:%f...' % pi
'pi is:3.141593...'
>>> 'pi is:%.5f' % pi
'pi is:3.14159'
>>> 'pi is:%i' % pi
'pi is:3'
(二)字段寬度跟精度
>>> from math import pi
>>> 'pi is:%10f' % pi
'pi is: 3.141593' #字段寬10,不足前位補空位
>>> '%10.2f' % pi
' 3.14' #字段寬10,精度爲2
>>> '%.2f' % pi
'3.14'
>>> '%.5s' % 'Google help' #精度爲5
'Googl'
>>>
(三)符號、對齊、用0填充
用0填充
在字段寬度和精度值之前還可以放置一個“標誌”,該標誌可以是0,加號,減號或者空格,0表示數字將會用0進行填充。
>>> 'pi is:%010.2f' % pi
'pi is:0000003.14'
>>>
注意:在上述例子中的010中,開頭的0並不意味着字段寬度說明符爲八進制數,只是普通的Python數值。
減號(-)用來左對齊數值
>>> '%10.2f' % pi
' 3.14'
>>> '%-10.2f' % pi
'3.14 '
>>>
加號(+):不管是正數還是負數都標示出正負號
>>> print(('%+5d' % 3.14) + '\n' + ('%+5d' % -3.14))
+3
-3 #負號標示出來
>>>
“ ”空格在正數前面加上空格(正負數的對齊時:很有用)
>>> print(('% 5d' % 3.14) + '\n' + ('%5d' % -3.14))
3
-3
>>>
三、字符串中最常用的方法
1.find()
解釋:可以在一個較長的字符串中查找子串,返回子串所在位置的最左端索引(第一次出現的子串),如果沒有找到則返回-1.
>>> 'I love Fishc.com'.find('com')
13
>>> title = 'I love fishc.com'
>>> title.find('fishc')
7
>>> title.find('hello')#找不到返回-1
-1
>>>
注意:如果返回值是0,不是布爾型的0,而是在索引位置0找到了子串。例如:
>>> namestr = '$$$ Get Rich Now!$$$'
>>> namestr.find('$$$')
0
>>>
find()添加起始點跟結束點參數
>>> namestr
'$$$ Get Rich Now!$$$'
>>> namestr.find('!$$',1)#只提供起始點
16
>>> namestr.find('!$$')
16
>>> namestr.find('Rich',0,7) #索引位置起始點0,結束點位置7之間沒有找到子串
-1
>>>
2.join()
解釋:用來連接序列中的元素,是字符串中很重要的方法,是split()方法的逆方法。
注意:需要被連接的序列元素都必須是字符串!!
>>> list1 = [1,3,4,6,7,9]
>>> seq = '+'
>>> seq.join(list1)
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
seq.join(list1)
TypeError: sequence item 0: expected str instance, int found
>>> list2 = ['2','5','6','9']
>>> seq = '+'
>>> seq.join(list2)
'2+5+6+9'
>>>
>>> dirs = '','user','bin','env'
>>> '/'.join(dirs)
'/user/bin/env'
>>> print('C:'+'\\'.join(dirs))
C:\user\bin\env
>>>
3.split()
解釋:將字符串分割成序列,是join()的逆方法。
>>> 'This is a good idea!'.replace('is','ez')
'Thez ez a good idea!'
>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']>>> 'I love Fishc.com'.split(' ')
['I', 'love', 'Fishc.com']
>>>
4.lower()
解釋:返回字符串的小寫字母版。
>>> title = 'I love Fishc.com'
>>> title.lower()
'i love fishc.com'
>>>
5.replace()
解釋:返回某字符串的所有匹配項均被替換之後得到的字符串。
>>> 'This is a good idea!'.replace('is','ez') #可以理解爲查找並替換
'Thez ez a good idea!'
>>>
6.strip()
解釋:(1)不加參數是除去字符串兩側的空格(不含字符串中間的空格)
(2)加參數,是除去兩側的需要去掉的字符
>>> ' I love Fishc.com '.strip()#不加參數
'I love Fishc.com'
>>>
加參數,只會去除字符串兩側的字符,對字符串中間沒有影響.
>>> '### I love ##Fishc.com ## hello ####'.strip('##')#加參數
' I love ##Fishc.com ## hello '
>>>
課後習題:
1. 請問以下這行代碼會打印什麼內容?
>>> '{{{1}}}'.format('no print','print') #外層{}對中間層{}轉義,輸出{};中間的{1}對應的format()參數的索引位置是1
'{print}'
>>> '{{1}}'.format('no print','print') #這個1被解釋掉了
'{1}'
>>>
2. 以下代碼中,a, b, c是什麼參數?
關鍵字參數
>>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com")
'I love FishC.com'
>>>
3. 以下代碼中,{0}, {1}, {2}是什麼參數?
位置參數
>>> "{0} love {1}.{2}".format("I", "FishC", "com")
'I love FishC.com'
>>>
4. 如果想要顯示Pi = 3.14,format前邊的字符串應該怎麼填寫呢?
>>> "{0}{1:.2f}".format('Pi= ',3.1415)
'Pi= 3.14'
>>>
動動手:
0. 編寫一個進制轉換程序,程序演示如下(提示,十進制轉換二進制可以用bin()這個BIF):
q=True
while q:
num=input('請輸入一個十進制的整數(輸入Q結束程序):')
if num !='Q':
num=int(num)
print(('十進制->十六進制: %d -> %x') % (num,num))
print(('十進制->八進制: %d -> %o') % (num,num))
print(('十進制->二進制: %d -> ') % num,bin(num))
else:
q=False
演示結果:
請輸入一個十進制的整數(輸入Q結束程序):9
十進制->十六進制: 9 -> 0x9
十進制->八進制: 9 -> 0o11
十進制->二進制: 9 -> 0b1001
請輸入一個十進制的整數(輸入Q結束程序):