在Python中使用字符串调用内置函数

ytu*_*ytu 0 python function-calls

我参考了以下主题,我不认为这篇文章与其中任何主题重复:

  1. 使用模块的名称(字符串)调用模块的函数
  2. Python 从字符串调用函数
  3. 在Python中使用字符串调用函数

例如,假设我有一个字符串,data_type = "int"并且我想直接使用该字符串调用内置函数int。顺便说一句,我不能拥有data_type = int,因为data_type实际上是从 JSON 文件加载的,即data_type始终是字符串或None.

我最好的(最巧妙的)尝试是eval(data_type)("4"),但正如人们所建议的,这eval似乎不是一个好的选择,应该避免。

另一种方法是创建一个类似的字典data_type_dic = {"int": int, "float": float}并执行data_type_dic[data_type]("4")。然而,创建这本词典对我来说就像“重新发明轮子”。

由于int是内置函数,而不是模块中的方法,因此getattr似乎行不通。它也不是一个自定义函数,因此locals()[data_type]给出KeyError.

那么使用相应的字符串调用内置函数的最佳方法是什么?

Ign*_*ams 6

最好的方法仍然是字典,但是:

>>> import builtins
>>> getattr(builtins, 'int')
<class 'int'>
Run Code Online (Sandbox Code Playgroud)