python通過函數(shù)名調(diào)用函數(shù)的幾種場景
一、說明
之前寫了一篇“Python執(zhí)行系統(tǒng)命令教程”講了如何執(zhí)行系統(tǒng)命令。
除了執(zhí)行系統(tǒng)命令外,我們有時還需要動態(tài)地執(zhí)行一些python代碼,有經(jīng)驗的朋友就會知道可以使用內(nèi)置函數(shù)eval實現(xiàn)這一需求,如eval('print(__file__)'),這還是比較簡單的。
但如果要動態(tài)執(zhí)行一個函數(shù),講的資料就會少一點,這次就要看這個需求該如何實現(xiàn)。
二、通過eval實現(xiàn)
2.1 通過eval調(diào)用同一個類內(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)用同一個文件內(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.') 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) passdef be_called_function(): print('here is be_called_function.')if __name__ == '__main__': obj = TestA() obj.active_call_function()
三、通過getattr實現(xiàn)
3.1 通過函數(shù)名調(diào)用同一個類內(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ù)所在的類的類實例 testb_obj = TestB() be_called_function = getattr(testb_obj, self.config_dict['be_called_function_name']) # 就直接調(diào)用。如果有其他參數(shù),一樣地傳就好了 be_called_function() passclass 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)用同文件的一級函數(shù)
import sysclass 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傳當前模塊名 module_name = sys.modules[’__main__’] be_called_function = getattr(module_name, self.config_dict['be_called_function_name']) # 就直接調(diào)用。如果有其他參數(shù),一樣地傳就好了 be_called_function() passdef be_called_function(): print('here is be_called_function.')if __name__ == '__main__': obj = TestA() obj.active_call_function()
3.4 通過函數(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傳函數(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() passif __name__ == '__main__': obj = TestA() obj.active_call_function()
以上就是python通過函數(shù)名調(diào)用函數(shù)的幾種場景的詳細內(nèi)容,更多關于python通過函數(shù)名調(diào)用函數(shù)的資料請關注好吧啦網(wǎng)其它相關文章!
相關文章:
1. idea設置代碼格式化的方法步驟2. Docker究竟是什么 為什么這么流行 它的優(yōu)點和缺陷有哪些?3. idea重置默認配置的方法步驟4. 教你在 IntelliJ IDEA 中使用 VIM插件的詳細教程5. 解決idea中Terminal終端無法執(zhí)行GIT命令+Terminal 中文亂碼問題6. IntelliJ IDEA 2020.2 配置大全詳細圖文教程(更新中)7. PHP內(nèi)核探索 —— 如何執(zhí)行PHP腳本:Zend引擎是如何解釋PHP腳本的8. 永久解決 Intellij idea 報錯:Error :java 不支持發(fā)行版本5的問題9. Python使用oslo.vmware管理ESXI虛擬機的示例參考10. 解決docker與vmware的沖突問題
