Skip to main content
 首页 » 编程设计

python之如果名称存储在变量中,则访问 Python 中的模块级函数

2025年05月04日14mengfanrong

如果事先不知道对象的名称,在模块顶部使用函数的最佳方法是什么:该函数可能取决于用户输入,因此它的名称存储在变量中。

一种解决方案使用 eval() :例如,在 ScipyCookbook/SignalSmooth: smooth() 中(也在对 StackOverflow: Python Smooth Time Series Data 的回答中引用)

import numpy   
window = 'hanning' 
w = eval('numpy.'+window+'(11)') 

将等同于

w = numpy.hanning(11) 

但是,有没有比使用脆弱/潜在危险的 eval 更好的方法?

例如,不会使用 vars()

w = vars(numpy)[window](11) 

首选?有更好/更 Pythonic 的想法吗?

请您参考如下方法:

您应该使用字典将有效的窗口函数名称映射到实际函数:

windows = {"bartlett": numpy.bartlett, 
           "blackman": numpy.blackman, 
           "hamming": numpy.hamming, 
           "hanning": numpy.hanning, 
           "kaiser": numpy.kaiser} 

如果你使用eval(),基本上允许用户执行任意代码。

变体

w = vars(numpy)[window](11) 

肯定比使用 eval() 好,但它仍然不能确保用户选择的函数在给定的上下文中有意义。 (通常,您会为此使用 getattr()。)