已有字符串形式的函數(shù)名稱,那么如何調(diào)用這個(gè)函數(shù)呢?
為通州等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及通州網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站制作、通州網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
通過調(diào)用內(nèi)置函數(shù)locals()和globals()返回的字典對(duì)象,就可以可以獲得名稱與對(duì)象的映射關(guān)系。其中,locals()僅在全局范圍內(nèi)調(diào)用時(shí)可以獲得函數(shù)對(duì)象。 我們來看以下的例子。
需要注意的是,使用上述方法通過字符串調(diào)用函數(shù)時(shí),為了系統(tǒng)的安全,防止執(zhí)行任意函數(shù),需要對(duì)函數(shù)名做一些處理,也就是使用統(tǒng)一的前綴為這些函數(shù)命名。例如在上述例子中,使用前綴cmd_+函數(shù)名的形式定義函數(shù)(cmd_help,cmd_sum)。
在傳入函數(shù)名字符串時(shí),只傳入函數(shù)名的后半部分(如"help","sum"),由程序添加前綴后組成完整的函數(shù)名,再調(diào)用該函數(shù)。
對(duì)于類的成員函數(shù),則可以使用getattr()獲得類成員函數(shù)。
上述代碼通過字符串調(diào)用了類成員函數(shù),與前一段代碼執(zhí)行的結(jié)果相同。
此外,還可以使用字典將字符串與函數(shù)對(duì)應(yīng)起來調(diào)用,缺點(diǎn)就是每增加一個(gè)函數(shù)需要相應(yīng)在字典對(duì)象中添加相應(yīng)的鍵值,增加代碼維護(hù)工作量。
以上代碼在Python 3.6以上運(yùn)行通過。
字符串是 Python
中常用的數(shù)據(jù)類型,我們可以使用引號(hào)('或")來創(chuàng)建字符串,對(duì)字符串進(jìn)行使用和操作,需要用到特定的函數(shù),以下是常用的Python字符串操作方法:
1. capitalize()
作用:capitalize() 主要是用來實(shí)現(xiàn)字符串首字母大寫,其他字母小寫的功能。
實(shí)例:
1
2str1 = "oldboy"
print(str1.capitalize())
輸出結(jié)果:Oldboy
2. swapcase()
作用:swapcase() 主要是用來實(shí)現(xiàn)字符串大小寫反轉(zhuǎn)。
實(shí)例:
1
2str1 = " Oldboy"
print(str1.swapcase())
輸出結(jié)果:oLDBOY
3. title()
作用:title() 主要是用來實(shí)現(xiàn)字符串非字母隔開的部分,首字母大寫,其余字母小寫。
實(shí)例:
1
2str1 = "Old boy edu com"
print(str1.title())
輸出結(jié)果:Old Boy Edu Com
4. upper()
作用:upper() 主要是用來實(shí)現(xiàn)字符串所有字母全部大寫。
實(shí)例:
1
2str1 = "Oldboyedu"
print(str1.upper())
輸出結(jié)果:OLDBOYEDU
5. lower()
作用:lower() 主要是用來實(shí)現(xiàn)字符串所有字母全部小寫。
實(shí)例:
1
2str1 = "oLDBOYEDU"
print(str1.lower())
輸出結(jié)果:oldboyedu
6. center()
作用:center() 主要是用來實(shí)現(xiàn)字符串內(nèi)容居中,填充物默認(rèn)為空。
實(shí)例:
1
2
3str1 = "Oldboyedu"
print(str1.center(15))
print(str1.center(15,"*"))
輸出結(jié)果:
Oldboyedu
***Oldboyedu***
7. find()
作用:find() 主要作用是通過元素找索引,可以整體找,可以切片,找不到則返回-1。
實(shí)例:
1
2
3str1 = "Oldboyedu"
print(str1.find('b'))
print(str1.find('A'))
輸出結(jié)果:3 -1
8. index()
作用:index() 主要作用是通過元素找索引,可以整體找,可以切片,找不到會(huì)報(bào)錯(cuò)。
實(shí)例:
1
2
3str1 = " Oldboyedu "
print(str1.index("b"))
print(str1.index("A"))
輸出結(jié)果:
Traceback (most recent call last):
File "", line 1, in
ValueError: substring not found
9. startswith(obj)
作用:startswith(obj) 主要作用是檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。
實(shí)例:
1
2str1 = "Oldboyedu"
print(str1.startswith("O"))
輸出結(jié)果:True
10. endswith(obj)
作用:endswith(obj) 主要作用是檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。
實(shí)例:
1
2str1 = " Oldboyedu "
print(str1.endswith("edu"))
輸出結(jié)果:True
11. strip()
作用:strip() 主要作用是去除字符串前后兩端的空格或其他字符、換行符、tab鍵等。
實(shí)例:
1
2
3
4str1 = "***Oldboy***"
print(str1.strip("*")) #去除兩邊的*
print(str1.lstrip("*")) #去除左邊的*
print(str1.rstrip("*")) #去除右邊的*
輸出結(jié)果:
Oldboy
Oldboy***
***Oldboy
12. replace(oldstr, newstr)
作用:replace(oldstr, newstr)主要作用是替換字符串。
實(shí)例:
1
2str1 = "Oldboyedu"
print(str1.replace("boy","man"))
輸出結(jié)果:Oldmanedu
13. isalpha()
作用:isalpha()主要作用是要判斷字符串是否只由字母組成,是返回Ture,否返回False。
實(shí)例:
1
2
3
4str1 = "Oldboyedu"
str2 = “Old boy edu”
print(str1.isalpha())
print(str2.isalpha())
輸出結(jié)果:True False
14. isdigit()
作用:isdigit()主要作用是判斷字符串是否只由數(shù)字組成,是返回Ture,否返回False。
實(shí)例:
1
2
3
4str1 = "Oldboyedu"
str2 = “520”
print(str1.isdigit())
print(str2.isdigit())
輸出結(jié)果:False True
15. format()
作用:format()主要作用是格式化字符串。
方式一:按位置傳參
1
2str1 = '我叫{},今年{}歲'.format('oldboy',30)
print(str1)
輸出結(jié)果:我叫oldboy,今年30歲
方式二:按索引傳參
1
2str1 = '我叫{0},今年{1}歲'.format('oldboy',30)
print(str1)
輸出結(jié)果:我叫oldboy,今年30歲
方式三:按key傳參
1
2str1 = '我叫{name},今年{age}歲'.format(age=30,name='oldboy')
print(str1)
輸出結(jié)果:我叫oldboy,今年30歲
16. count()
作用:count()主要作用是統(tǒng)計(jì)元素在字符串出現(xiàn)的次數(shù)。
1
2str1 = "oldboyedu"
print(str1.count(‘o’)) #統(tǒng)計(jì)字符o在字符串中出現(xiàn)的次數(shù)
數(shù)據(jù)結(jié)果:2
字符串是Python中基本的數(shù)據(jù)類型,幾乎在每個(gè)Python程序中都會(huì)使用到它。
▍1、Slicing
slicing切片,按照一定條件從列表或者元組中取出部分元素(比如特定范圍、索引、分割值)
▍2、****strip()
strip()方法用于移除字符串頭尾指定的字符(默認(rèn)為空格或換行符)或字符序列。
在使用strip()方法時(shí),默認(rèn)去除空格或換行符,所以#號(hào)并沒有去除。
可以給strip()方法添加指定字符,如下所示。
此外當(dāng)指定內(nèi)容不在頭尾處時(shí),并不會(huì)被去除。
第一個(gè)\n前有個(gè)空格,所以只會(huì)去取尾部的換行符。
最后strip()方法的參數(shù)是剝離其值的所有組合,這個(gè)可以看下面這個(gè)案例。
最外層的首字符和尾字符參數(shù)值將從字符串中剝離。字符從前端移除,直到到達(dá)一個(gè)不包含在字符集中的字符串字符為止。
在尾部也會(huì)發(fā)生類似的動(dòng)作。
▍3、****lstrip()
移除字符串左側(cè)指定的字符(默認(rèn)為空格或換行符)或字符序列。
同樣的,可以移除左側(cè)所有包含在字符集中的字符串。
▍4、rstrip()
移除字符串右側(cè)指定的字符(默認(rèn)為空格或換行符)或字符序列。
▍5、****removeprefix()
Python3.9中移除前綴的函數(shù)。
和strip()相比,并不會(huì)把字符集中的字符串進(jìn)行逐個(gè)匹配。
▍6、removesuffix()
Python3.9中移除后綴的函數(shù)。
▍7、****replace()
把字符串中的內(nèi)容替換成指定的內(nèi)容。
▍8、****re.sub()
re是正則的表達(dá)式,sub是substitute表示替換。
re.sub則是相對(duì)復(fù)雜點(diǎn)的替換。
和replace()做對(duì)比,使用re.sub()進(jìn)行替換操作,確實(shí)更高級(jí)點(diǎn)。
▍9、****split()
對(duì)字符串做分隔處理,最終的結(jié)果是一個(gè)列表。
當(dāng)不指定分隔符時(shí),默認(rèn)按空格分隔。
此外,還可以指定字符串的分隔次數(shù)。
▍10、****rsplit()
從右側(cè)開始對(duì)字符串進(jìn)行分隔。
▍11、****join()
string.join(seq)。以string作為分隔符,將seq中所有的元素(的字符串表示)合并為一個(gè)新的字符串。
▍12、****upper()
將字符串中的字母,全部轉(zhuǎn)換為大寫。
▍13、****lower()
將字符串中的字母,全部轉(zhuǎn)換為小寫。
▍14、capitalize()
將字符串中的首個(gè)字母轉(zhuǎn)換為大寫。
▍15、****islower()
判斷字符串中的所有字母是否都為小寫,是則返回True,否則返回False。
▍16、isupper()
判斷字符串中的所有字母是否都為大寫,是則返回True,否則返回False。
▍17、****isalpha()
如果字符串至少有一個(gè)字符并且所有字符都是字母,則返回 True,否則返回 False。
▍18、isnumeric()
如果字符串中只包含數(shù)字字符,則返回 True,否則返回 False。
▍19、isalnum()
如果字符串中至少有一個(gè)字符并且所有字符都是字母或數(shù)字,則返回True,否則返回 False。
▍20、count()
返回指定內(nèi)容在字符串中出現(xiàn)的次數(shù)。
▍21、****find()
檢測(cè)指定內(nèi)容是否包含在字符串中,如果是返回開始的索引值,否則返回-1。
此外,還可以指定開始的范圍。
▍22、rfind()
類似于find()函數(shù),返回字符串最后一次出現(xiàn)的位置,如果沒有匹配項(xiàng)則返回 -1。
▍23、startswith()
檢查字符串是否是以指定內(nèi)容開頭,是則返回 True,否則返回 False。
**
**
▍24、****endswith()
檢查字符串是否是以指定內(nèi)容結(jié)束,是則返回 True,否則返回 False。
▍25、****partition()
string.partition(str),有點(diǎn)像find()和split()的結(jié)合體。
從str出現(xiàn)的第一個(gè)位置起,把字符串string分成一個(gè)3 元素的元組(string_pre_str,str,string_post_str),如果string中不包含str則 string_pre_str==string。
▍26、center()
返回一個(gè)原字符串居中,并使用空格填充至長度width的新字符串。
▍27、ljust()
返回一個(gè)原字符串左對(duì)齊,并使用空格填充至長度width的新字符串。
▍28、rjust()
返回一個(gè)原字符串右對(duì)齊,并使用空格填充至長度width的新字符串。
▍29、f-Strings
f-string是格式化字符串的新語法。
與其他格式化方式相比,它們不僅更易讀,更簡潔,不易出錯(cuò),而且速度更快!
▍30、swapcase()
翻轉(zhuǎn)字符串中的字母大小寫。
▍31、zfill()
string.zfill(width)。
返回長度為width的字符串,原字符串string右對(duì)齊,前面填充0。
參考文獻(xiàn):
eval()能夠以Python表達(dá)式的方式解析并執(zhí)行字符串,并將返回結(jié)果輸出。eval()函數(shù)將去掉字符串的兩個(gè)引號(hào),將其解釋為一個(gè)變量。
對(duì)于eval()括號(hào)中的的字符串(非數(shù)字),如果字符串帶的是單引號(hào)或者是雙引號(hào)都會(huì)引起NameError,這是因?yàn)閑val()函數(shù)在處理字符串時(shí)會(huì)去掉其兩個(gè)引號(hào)。正確應(yīng)該使用一個(gè)單引號(hào)包含一個(gè)雙引號(hào)組成的三引號(hào)來包含字符串。
在日常項(xiàng)目中,我們經(jīng)常會(huì)使用python從字符串中提取我們想要的信息,以下是各種提取信息方法的總結(jié)。
格式: str[beg:end:step]
描述: 字符串[開始索引:結(jié)束索引:步長]切取字符串為開始索引到結(jié)束索引-1內(nèi)的字符串步長不指定時(shí)步長為1
舉例:
print(str[::2]) //::這里表示整個(gè)字符串,每兩個(gè)位置提取一個(gè)
print(str[1:3]) //提取第2個(gè)到第3個(gè)
print(str[2::]) //截取2 - 末尾的字符
本小節(jié)介紹了,處理字符串經(jīng)常用到的一些函數(shù)方法。
語法: str.find(str, beg=0, end=len(string))
描述: Python find() 方法檢測(cè)字符串中是否包含子字符串 str ,如果指定 beg(開始) 和 end(結(jié)束) 范圍,則檢查是否包含在指定范圍內(nèi),如果包含子字符串返回開始的索引值,否則返回-1。
語法: str.split(str="", num=string.count(str)).
描述: Python split() 通過指定分隔符對(duì)字符串進(jìn)行切片,如果參數(shù) num 有指定值,則分隔 num+1 個(gè)子字符串.返回分割后的字符串列表,該方法可以講字符串轉(zhuǎn)化為列表處理。
另外的: str.splitlines([keepends])按照行('\r', '\r\n', \n')分隔,返回一個(gè)包含各行作為元素的列表,如果參數(shù) keepends 為 False,不包含換行符,如果為 True,則保留換行符。
語法: str.partition(str)
描述: partition() 方法用來根據(jù)指定的分隔符將字符串進(jìn)行分割。如果字符串包含指定的分隔符,則返回一個(gè)3元的元組,第一個(gè)為分隔符左邊的子串,第二個(gè)為分隔符本身,第三個(gè)為分隔符右邊的子串。
語法: str.replace(old, new, max)
描述: Python replace() 方法把字符串中的 old(舊字符串) 替換成 new(新字符串),如果指定第三個(gè)參數(shù)max,則替換不超過 max 次。
語法: str.strip([chars]);
描述: Python strip() 方法用于移除字符串頭尾指定的字符(默認(rèn)為空格或換行符)或字符序列。:該方法只能刪除開頭或是結(jié)尾的字符,不能刪除中間部分的字符。
語法: str.join(sequence)
描述: Python join() 方法用于將序列中的元素以指定的字符連接生成一個(gè)新的字符串。
上述方法還有其變形,如str.rfind(),這代表從字符串右邊開始處理,正常是從左邊開始處理。下表是其它常用的python字符串自帶函數(shù)方法。
正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便的檢查一個(gè)字符串是否與某種模式匹配。本小節(jié)主要介紹Python中常用的正則表達(dá)式處理函數(shù)和正則表達(dá)式的書寫規(guī)則。
re 模塊使 Python 語言擁有全部的正則表達(dá)式功能。所以在python中使用正則表達(dá)式處理函數(shù)需要import re
語法: re.search(pattern, string, flags=0)
描述: re.search 掃描整個(gè)字符串并返回第一個(gè)成功的匹配。匹配成功re.search方法返回一個(gè)匹配的對(duì)象,否則返回None。
語法: re.sub(pattern, repl, string, count=0, flags=0)
描述: Python 的 re 模塊提供了re.sub用于替換字符串中的匹配項(xiàng)。
語法: pattern.findall(string, pos, endpos)
描述: 在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表,如果沒有找到匹配的,則返回空列表。注意: match 和 search 是匹配一次 findall 匹配所有。
模式字符串使用特殊的語法來表示一個(gè)正則表達(dá)式: