Python3通過函式名呼叫函式的幾種場景實現

2021-10-20 19:18:39 字數 4800 閱讀 7032

一、說明

除了執行系統命令外,我們有時還需要動態地執行一些python**,有經驗的朋友就會知道可以使用內建函式eval實現這一需求,如eval("print(__file__)"),這還是比較簡單的。

但如果要動態執行乙個函式,講的資料就會少一點,這次就要看這個需求該如何實現。

二、通過eval實現

1 通過eval呼叫同乙個類內的函式

class

testa

:def

__init__

(self)

: self.config_dict =

pass

defactive_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

defbe_called_function

(self)

:print

("here is be_called_function."

)if __name__ ==

"__main__"

: obj = testa(

) obj.active_call_function(

)

2 通過eval呼叫同乙個檔案內的一級函式

'''

'''class

testa

:def

__init__

(self)

: self.config_dict =

pass

defactive_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

defbe_called_function()

:print

("here is be_called_function."

)if __name__ ==

"__main__"

: obj = testa(

) obj.active_call_function(

)

三、通過getattr實現

1 通過函式名呼叫同乙個類內的函式

class

testa

:def

__init__

(self)

: self.config_dict =

pass

defactive_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"])

# 就直接呼叫。如果有其他引數,一樣地傳就好了

be_called_function(

)pass

defbe_called_function

(self)

:print

("here is be_called_function."

)if __name__ ==

"__main__"

: obj = testa(

) obj.active_call_function(

)

2 通過函式名呼叫其他類的函式

'''

'''class

testa

:def

__init__

(self)

: self.config_dict =

pass

defactive_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 通過函式名呼叫同檔案的一級函式

import sys

class

testa

:def

__init__

(self)

: self.config_dict =

pass

defactive_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

defbe_called_function()

:print

("here is be_called_function."

)if __name__ ==

"__main__"

: obj = testa(

) obj.active_call_function(

)

4 通過函式名呼叫在其他檔案的一級函式

class

testa

:def

__init__

(self)

: self.config_dict =

pass

defactive_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通過pymongo操作mongoDB

2,增刪改查 mongodb預設開啟的埠號是27017 import pymongo 連線本地mongo服務 client bendi pymongo.mongoclient db bendi client bendi db name col bendi db bendi col name impo...

python3通過json獲取天氣資訊

通過python,每天定時傳送今明倆天的天氣資訊 測試的時候可以傳送給自己,後面可以傳送給指定的人或 from future import unicode literals from threading import timer from wxpy import import requests im...

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

一 說明 之前寫了一篇 python執行系統命令教程 講了如何執行系統命令。除了執行系統命令外,我們有時還需要動態地執行一些python 有經驗的朋友就會知道可以使用內建函式eval實現這一需求,如eval print file 這還是比較簡單的。但如果要動態執行乙個函式,講的資料就會少一點,這次就...