您好,登錄后才能下訂單哦!
這篇文章主要介紹python中怎么通過函數名調用函數,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
常用內置函數
(不用import就可以直接使用) :
help(obj) 在線幫助, obj可是任何類型
callable(obj) 查看一個obj是不是可以像函數一樣調用
repr(obj) 得到obj的表示字符串,可以利用這個字符串
eval重建該對象的一個拷貝
eval_r(str) 表示合法的python表達式,返回這個表達式
dir(obj) 查看obj的name space中可見的name
hasattr(obj,name) 查看一個obj的name space中是否有name
getattr(obj,name) 得到一個obj的name space中的一個name
setattr(obj,name,value) 為一個obj的name space中的一個name指向vale這個object
delattr(obj,name) 從obj的name space中刪除一個name vars(obj) 返回一個object的name
space。用dictionary表示
locals() 返回一個局部name space,用dictionary表示
globals() 返回一個全局name space,用dictionary表示
type(obj) 查看一個obj的類型
isinstance(obj,cls) 查看obj是不是cls的instance
issubclass(subcls,supcls) 查看subcls是不是supcls的子類
1.通過eval調用同一個類內的函數 eval()使用原因:
1)在編譯語言里要動態地產生代碼,基本上是不可能的,但動態語言是可以,意味著軟件已經部署到服務器上了,但只要作很少的更改,只好直接修改這部分的代碼,就可立即實現變化,不用整個軟件重新加載。
2)在machin learning里根據用戶使用這個軟件頻率,以及方式,可動態地修改代碼,適應用戶的變化。
eval()函數
eval(expression[, globals[, locals]])
expression – 表達式。
globals – 變量作用域,全局命名空間,如果被提供,則必須是一個字典對象。
locals – 變量作用域,局部命名空間,如果被提供,可以是任何映射對象。
返回傳入字符串的表達式的結果
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"] # 就直接調用。如果有其他參數,一樣地傳就好了 # 另外也可以是"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.通過eval調用同一個文件內的一級函數
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"] # 就直接調用。如果有其他參數,一樣地傳就好了 # 另外也可以是"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() 函數用于返回一個對象屬性值。語法如下:
getattr(object, name[, default])
object – 對象。
name – 字符串,對象屬性。
default – 默認返回值,如果不提供該參數,在沒有對應屬性時,將觸發 AttributeError。
getattr(object, name) = object.name
getattr(a, ‘b')的作用就和a.b是一樣的
示例:
result = obj.method(args) // 使用getattr func = getattr(obj, "method") result = func(args) // 或者寫成一行 result = getattr(obj, "method")(args)
主要有兩種異常,異常的安全用法:
AttributeError:對象中沒有該屬性。
try: func = getattr(obj, "method") except AttributeError: ...... deal else: result = func(args) // 或指定默認返回值 func = getattr(obj, "method", None) if func: func(args)
TypeError: 不可調用
func = getattr(obj, "method", None) if callable(func): func(args)
1.通過函數名調用同一個類內的函數
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"]) # 就直接調用。如果有其他參數,一樣地傳就好了 be_called_function() pass def be_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 = { "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傳被調用的函數所在的類的類實例 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 = { "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"]) # 就直接調用。如果有其他參數,一樣地傳就好了 be_called_function() pass def be_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 = { "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傳函數所在模塊名 # __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()
以上是“python中怎么通過函數名調用函數”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。