如何使用字符串按名称动态调用 Python 函数?
How to call Python function by name dynamically using a string?
我有一个 Python 函数调用,如下所示:
import torchvision
model = torchvision.models.resnet18(pretrained=configs.use_trained_models)
效果很好。
如果我尝试让它动态化:
import torchvision
model_name = 'resnet18'
model = torchvision.models[model_name](pretrained=configs.use_trained_models)
然后它失败了:
TypeError: 'module' object is not subscriptable
这是有道理的,因为 model
是一个导出一堆东西的模块,包括 resnet 函数:
# __init__.py for the "models" module
...
from .resnet import *
...
如何在事先不知道其名称的情况下动态调用此函数(除此之外我得到一个带有函数名称的字符串)?
您可以使用getattr
函数:
import torchvision
model_name = 'resnet18'
model = getattr(torchvision.models, model_name)(pretrained=configs.use_trained_models)
这基本上与点符号相同,只是在函数形式中接受一个字符串来检索 attribute/method。
我有一个 Python 函数调用,如下所示:
import torchvision
model = torchvision.models.resnet18(pretrained=configs.use_trained_models)
效果很好。
如果我尝试让它动态化:
import torchvision
model_name = 'resnet18'
model = torchvision.models[model_name](pretrained=configs.use_trained_models)
然后它失败了:
TypeError: 'module' object is not subscriptable
这是有道理的,因为 model
是一个导出一堆东西的模块,包括 resnet 函数:
# __init__.py for the "models" module
...
from .resnet import *
...
如何在事先不知道其名称的情况下动态调用此函数(除此之外我得到一个带有函数名称的字符串)?
您可以使用getattr
函数:
import torchvision
model_name = 'resnet18'
model = getattr(torchvision.models, model_name)(pretrained=configs.use_trained_models)
这基本上与点符号相同,只是在函数形式中接受一个字符串来检索 attribute/method。