Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法将函数名自动附加到列表中?_Python_Function_Append - Fatal编程技术网

Python 有没有办法将函数名自动附加到列表中?

Python 有没有办法将函数名自动附加到列表中?,python,function,append,Python,Function,Append,其思想是,当编写新函数时,它的变量名会自动附加到列表中 需要注意的是,我意识到我可以直接使用mylist.append(无论什么),但我正在寻找一种自动追加的方法,而不是手动追加。 所以,如果我们从 def function1(*args): print "string" def function2(*args): print "string 2" mylist = [] …有没有一种方法可以自动将“function1”和“function2”附加到mylist中,这样它就

其思想是,当编写新函数时,它的变量名会自动附加到列表中

需要注意的是,我意识到我可以直接使用mylist.append(无论什么),但我正在寻找一种自动追加的方法,而不是手动追加。

所以,如果我们从

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