我最近才开始学习 Python。让我解释一下我要完成的工作。我有这个 .py 脚本,它基本上有几个函数(硬编码到脚本中),都需要添加到一个列表中,这样我就可以通过简单地使用索引运算符来获得我需要的函数,如下所示:
需要函数 = 函数列表[需要函数索引]
我第一次尝试实现这一点导致了以下代码结构:
(imports)
function_list = []
(other global variables)
def function_0 = (...)
function_list.append(function_0)
def function_1 = (...)
function_list.append(function_1)
def function_2 = (...)
function_list.append(function_2)
(rest of code)
但我不喜欢那个解决方案,因为它不是很优雅。我的目标是能够简单地将函数定义添加到脚本中(没有附加调用),脚本会自动将其添加到函数列表中。
我曾想过在另一个函数中定义所有函数,但我不认为我会得到这些。我想也许用装饰器“标记”每个函数,但我意识到装饰器(如果我理解正确的话)在每次调用函数时都会被调用,而不仅仅是一次。
一段时间后,我想出了这个解决方案:
(imports)
(global variables)
def function_0 = (...)
def function_1 = (...)
def function_2 = (...)
function_list= [globals()[x] for x in globals() if re.match('^function_[0-9]+$', x)]
(rest of code)
作为一种解决方案,我更喜欢它,但我唯一的疑虑是,出于整洁的目的,我更愿意在脚本顶部完全定义 function_list。但是,我不能这样做,因为在脚本顶部调用 globals() 将不包含这些函数,因为它们尚未定义。
也许我应该简单地满足于一个不太优雅的解决方案,或者也许我没有以惯用的方式编写我的脚本。无论如何,任何输入和建议都将受到赞赏。