python通過函式名呼叫函式的幾種場景

2022-10-04 13:36:43 字數 4020 閱讀 2861

一、說明

之前寫了一篇「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.基本引數的使用...