Python 有没有办法将函数名自动附加到列表中?
其思想是,当编写新函数时,它的变量名会自动附加到列表中 需要注意的是,我意识到我可以直接使用mylist.append(无论什么),但我正在寻找一种自动追加的方法,而不是手动追加。 所以,如果我们从Python 有没有办法将函数名自动附加到列表中?,python,function,append,Python,Function,Append,其思想是,当编写新函数时,它的变量名会自动附加到列表中 需要注意的是,我意识到我可以直接使用mylist.append(无论什么),但我正在寻找一种自动追加的方法,而不是手动追加。 所以,如果我们从 def function1(*args): print "string" def function2(*args): print "string 2" mylist = [] …有没有一种方法可以自动将“function1”和“function2”附加到mylist中,这样它就
def function1(*args):
print "string"
def function2(*args):
print "string 2"
mylist = []
…有没有一种方法可以自动将“function1”和“function2”附加到mylist中,这样它就会变成这样
mylist = [function1, function2]
具体来说,我希望列出变量名,而不是字符串(例如“function1”)
我正在学习Python,只是在做实验,所以目前这并没有什么特别的用途,我只是想知道这是否可行
提前感谢您的建议,如果我不清楚,请愉快地回答任何问题
**只需将函数对象添加到列表中:
mylist = [function1, function2]
或者使用.append()
:
Python函数是一流的对象。它们是值,就像类、字符串和整数一样
如果要为整个模块自动执行此操作,可以使用快速列出迄今为止在模块中定义的所有函数,只需以下人员提供一些帮助:
v.\uuuu模块\uuuu==\uuuuu名称\uuu
测试确保我们只列出当前模块中的函数,而不列出我们导入的任何内容
然而,显式仍然比隐式好。在每个函数下面添加mylist.append(functionname)
,或者使用装饰器:
mylist = []
def listed(func):
mylist.append(func)
return func
@listed
def function1():
pass
@listed
def function2():
pass
使用
@列出的
装饰器“标记”的每个函数都会添加到mylist
列表中。原则上,您可以使用装饰器来完成此操作,这可能是一种半自动解决方案:
@gather
def function1():
print "function 1"
@gather
def function2():
print "function 2"
这种装饰器的一个实现本质上是一个函数,它获取一个函数作为参数:
function_list = []
def gather(func):
function_list.append(func) # or .append(func.__name__)
return func
在这个简单的版本中,它可能一点用处都没有,但是流行的库和框架通常使用这种技术的增强版本。例如,请参阅Flask的decorator,以指定处理特定HTTP请求的函数。Hi Martijn,感谢您的响应。我知道这是可能的,但我特别想知道是否有可能自动完成。这样做的目的是,如果我要编写许多函数,那么就不必费心手动将每个函数添加到列表中。@user2061277 Explicit比implicit好。它将如何确定哪些内容应该放在这个列表中,哪些不应该放在这个列表中?@user2061277:你的问题还不清楚。有许多选择;使用decorators('标记'所有要添加到列表中的函数,使用一些额外的语法),列出
globals()
名称空间中的所有对象,然后对函数进行筛选,等等。为了反映这一点,我修改了这个问题。装潢师和环球音乐听起来很有趣,所以我要去学习一下。谢谢这个解决方案正是我所希望的。很好的教训。
@gather
def function1():
print "function 1"
@gather
def function2():
print "function 2"
function_list = []
def gather(func):
function_list.append(func) # or .append(func.__name__)
return func