python通過函數(shù)名調(diào)用函數(shù)的幾種場(chǎng)景
一、說明
之前寫了一篇“Python執(zhí)行系統(tǒng)命令教程”講了如何執(zhí)行系統(tǒng)命令。
除了執(zhí)行系統(tǒng)命令外,我們有時(shí)還需要?jiǎng)討B(tài)地執(zhí)行一些python代碼,有經(jīng)驗(yàn)的朋友就會(huì)知道可以使用內(nèi)置函數(shù)eval實(shí)現(xiàn)這一需求,如eval("print(__file__)"),這還是比較簡(jiǎn)單的。
但如果要?jiǎng)討B(tài)執(zhí)行一個(gè)函數(shù),講的資料就會(huì)少一點(diǎn),這次就要看這個(gè)需求該如何實(shí)現(xiàn)。
二、通過eval實(shí)現(xiàn)
2.1 通過eval調(diào)用同一個(gè)類內(nèi)的函數(shù)
class TestA: def __init__(self): self.config_dict = { "be_called_function_name": "self.be_called_function()", } pass def active_call_function(self): print("here is active_call_function.") be_called_function_name = self.config_dict["be_called_function_name"] # 就直接調(diào)用。如果有其他參數(shù),一樣地傳就好了 # 另外也可以是"be_called_function_name"是"be_called_function",然后eval(be_called_function_name)() eval(be_called_function_name) pass def be_called_function(self): print("here is be_called_function.") if __name__ == "__main__": obj = TestA() obj.active_call_function()
2.2 通過eval調(diào)用同一個(gè)文件內(nèi)的一級(jí)函數(shù)
class TestA: def __init__(self): self.config_dict = { "be_called_function_name": "be_called_function()", } pass def active_call_function(self): print("here is active_call_function.") be_called_function_name = self.config_dict["be_called_function_name"] # 就直接調(diào)用。如果有其他參數(shù),一樣地傳就好了 # 另外也可以是"be_called_function_name"是"be_called_function",然后eval(be_called_function_name)() eval(be_called_function_name) pass def be_called_function(): print("here is be_called_function.") if __name__ == "__main__": obj = TestA() obj.active_call_function()
三、通過getattr實(shí)現(xiàn)
3.1 通過函數(shù)名調(diào)用同一個(gè)類內(nèi)的函數(shù)
class TestA: def __init__(self): self.config_dict = { "be_called_function_name": "be_called_function", } pass def active_call_function(self): print("here is active_call_function.") # getaattr(module_name, function_name),module_name傳self即可 be_called_function = getattr(self, self.config_dict["be_called_function_name"]) # 就直接調(diào)用。如果有其他參數(shù),一樣地傳就好了 be_called_function() pass def be_called_function(self): print("here is be_called_function.") if __name__ == "__main__": obj = TestA() obj.active_call_function()
3.2 通過函數(shù)名調(diào)用其他類的函數(shù)
class TestA: def __init__(self): self.config_dict = { "be_called_function_name": "be_called_function", } pass def active_call_function(self): print("here is active_call_function.") # getaattr(module_name, function_name),module_name傳被調(diào)用的函數(shù)所在的類的類實(shí)例 testb_obj = TestB() be_called_function = getattr(testb_obj, self.config_dict["be_called_function_name"]) # 就直接調(diào)用。如果有其他參數(shù),一樣地傳就好了 be_called_function() pass class TestB: def be_called_function(self): print("here is be_called_function.") if __name__ == "__main__": obj = TestA() obj.active_call_function()
3.3 通過函數(shù)名調(diào)用同文件的一級(jí)函數(shù)
import sys class TestA: def __init__(self): self.config_dict = { "be_called_function_name": "be_called_function", } pass def active_call_function(self): print("here is active_call_function.") # getaattr(module_name, function_name),module_name傳當(dāng)前模塊名 module_name = sys.modules['__main__'] be_called_function = getattr(module_name, self.config_dict["be_called_function_name"]) # 就直接調(diào)用。如果有其他參數(shù),一樣地傳就好了 be_called_function() pass def be_called_function(): print("here is be_called_function.") if __name__ == "__main__": obj = TestA() obj.active_call_function()
3.4 通過函數(shù)名調(diào)用在其他文件的一級(jí)函數(shù)
class TestA: def __init__(self): self.config_dict = { "be_called_function_name": "be_called_function", } pass def active_call_function(self): print("here is active_call_function.") # getaattr(module_name, function_name),module_name傳函數(shù)所在模塊名 # __import__()傳函數(shù)所在文件 module_name = __import__("test_call_function_by_string1") be_called_function = getattr(module_name, self.config_dict["be_called_function_name"]) # 就直接調(diào)用。如果有其他參數(shù),一樣地傳就好了 be_called_function() pass if __name__ == "__main__": obj = TestA() obj.active_call_function()
以上就是python通過函數(shù)名調(diào)用函數(shù)的幾種場(chǎng)景的詳細(xì)內(nèi)容,更多關(guān)于python通過函數(shù)名調(diào)用函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python函數(shù)調(diào)用追蹤實(shí)現(xiàn)代碼
- Python根據(jù)字符串調(diào)用函數(shù)過程解析
- Python基于callable函數(shù)檢測(cè)對(duì)象是否可被調(diào)用
- Python函數(shù)遞歸調(diào)用實(shí)現(xiàn)原理實(shí)例解析
- Python基于字典實(shí)現(xiàn)switch case函數(shù)調(diào)用
- python怎么調(diào)用自己的函數(shù)
- Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式
- 解決python調(diào)用自己文件函數(shù)/執(zhí)行函數(shù)找不到包問題
- python通過函數(shù)名調(diào)用函數(shù)的幾種方法總結(jié)
相關(guān)文章
Python學(xué)習(xí)小技巧之列表項(xiàng)的推導(dǎo)式與過濾操作
這篇文章主要給大家介紹了Python學(xué)習(xí)小技巧之列表項(xiàng)的推導(dǎo)式與過濾操作的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看把。2017-05-05Pyecharts繪制可視化地球?qū)崿F(xiàn)示例
這篇文章主要為大家介紹了Pyecharts繪制可視化地球?qū)崿F(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Python實(shí)現(xiàn)電腦壁紙的采集與輪換效果
這篇文章主要為大家介紹了如何利用Python實(shí)現(xiàn)電腦壁紙的采集以及輪換效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-04-04Python判斷素?cái)?shù)的3種方法及for-else語句的用法介紹
素?cái)?shù)又叫質(zhì)數(shù),指的是>1的整數(shù)中,只能被1和這個(gè)數(shù)本身整除的數(shù),這篇文章主要給大家介紹了關(guān)于Python判斷素?cái)?shù)的3種方法及for-else語句的用法介紹的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05