微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用字符串按名称动态调用 Python 函数?

如何解决如何使用字符串按名称动态调用 Python 函数?

我有一个像这样的 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)

这基本上与点符号相同,只是在函数形式中接受字符串来检索属性/方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。