一、說明
之前寫了一篇「python執行系統命令教程」講了如何執行系統命令。
除了執行系統命令外,我們有時還需要動態地執行一些python**,有經驗的朋友就會知道可以使用內建函式eval實現這一需求,如eval("print(__file__)"),這還是比較簡單的。
但如果要動態執行乙個函式,講的資料就會少一點,這次就要看這個需求該如何實現。
二、通過eval實現
2.1 通過eval呼叫同乙個類內的函式
class testa:
def __init__(self):
self.config_dict =
pass
def active_call_function(self):
print("here is active_call_function.")
be_called_function_name = self.config_dict["be_called_function_name"]
# 就直接呼叫。如果有其他引數,一樣地傳就好了
# 另外也可以是"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呼叫同乙個檔案內的一級函式
class testa:
def __init__(self):
self.config_dict =
pass
def active_call_function(self):
print("here is active_call_function.")
be_called_function_name = self.config_dict["be_called_function_name"]
# 就直接呼叫。如果有其他引數,一樣地傳就好了
# 另外也可以是"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實現
3.1 通過函式名呼叫同乙個類內的函式
class testa:
def __init__(self):
self.co程式設計客棧nfig_dict =
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"])
# 就直接呼叫。如果有其他引數,一樣地傳hrwdkj就好了
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 通過函式名呼叫其他類的函式
class testa:
def __init__(self):
self.config_dict =
pass
def active_call_function(self):
print("here is active_call_function.")
# getaattr(module_name, function_name),module_name傳被呼叫的函式所在的類的類例項
testb_obj = testb()
be_called_function = getattr(testb_obj, self.config_dict["be_called_function_name"])
# 就直接呼叫。如果有其他引數,一樣地傳就好了
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 通過函式名呼叫同檔案的一級函式
import sys
class testa:
def __init__(self):
self.config_dict =
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"])
# 就直接呼叫。如果有其他引數,一樣地傳就好了
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 通過函式名呼叫在其他檔案的一級函式
class testa:
def __init__(self):
self.config_dict =
pass
def active程式設計客棧_call_function(self):
print("here is active_call_function.")
# getaattr(module_name, function_name),module_name傳函式所在模組名
# __import__()傳函式所在檔案
module_name = __import__("test_call_function_by_string1")
be_called_function = getattr(module_name, self.config_dict["be_called_function_name"])
# 就直接呼叫。如果有其他引數,一樣地傳就好了
be_called_function()
pass
if __name__ == "__main__":
obj = testa()
obj.active_call_function()
Python3通過函式名呼叫函式的幾種場景實現
一 說明 除了執行系統命令外,我們有時還需要動態地執行一些python 有經驗的朋友就會知道可以使用內建函式eval實現這一需求,如eval print file 這還是比較簡單的。但如果要動態執行乙個函式,講的資料就會少一點,這次就要看這個需求該如何實現。二 通過eval實現 1 通過eval呼叫...
由函式名稱呼叫函式
對dll進行過動態載入的朋友應該清楚getprocaddress這個api,其作用是通過乙個函式名稱從dll模組中獲得這個函式的位址,然後將其轉換成相應的函式指標供我們呼叫。這便是通過函式名稱來呼叫函式的乙個典型例子。下面我們就 一下這個函式,主要思路就是建立一張函式對映表。include usin...
顯示函式名 Python函式的定義與呼叫
函式是組織好的 可重複使用的 用來實現一定功能的 段。函式設計遵循單一職責原則,提倡乙個函式只完成單一乙個功能,降低程式的藕合性,提高可維護性。def 函式名 引數列表 函式 文件字串 函式體 return 表示式 可選,沒有這行相當於返回none。函式名 有引數的在括號裡加上引數1.基本引數的使用...