如何在Python中定义其名称包含变量的函数?

如何在Python中定义其名称包含变量的函数?,python,function,Python,Function,在使用Python2.7时,如何定义一个名为变量的函数?比如: for x in xrange(40): def functionname + x(): print x 这太疯狂了 为什么不: def functionname(x): if x > 40: raise ValueError 然后根据您的意愿处理每种情况。在列表或字典中存储对函数的引用 为此,让我们制作一个函数,该函数将存储在列表中: def functionmaker(x):

在使用Python2.7时,如何定义一个名为变量的函数?比如:

for x in xrange(40):
  def functionname + x():
    print x
这太疯狂了

为什么不:

def functionname(x):
    if x > 40:
        raise ValueError

然后根据您的意愿处理每种情况。

在列表或字典中存储对函数的引用

为此,让我们制作一个函数,该函数将存储在列表中:

def functionmaker(x):
    def function():
        print(x)
    return function
这允许我们在创建函数时捕获值
x

现在让我们列出这些函数:

functionlist = [functionmaker(x) for x in xrange(40)]
现在我们可以称之为:

functionlist[5]()    # prints 5

编辑:由于编程风格不好,已删除此项。最好看看答案。很抱歉。

一种比依赖exec()更具python风格的方法是使用locals()dict

这些台词是由受过训练的专业人士写的。不要在家里尝试这个。。。或者,这只是糟糕的编程实践

注二:

  • print_功能
    import可在
    lambda
    s中打印
  • lambda x=x:
    是一种解决方法

我曾经尝试过这样做,可以做到,但实际上不应该做到。你最好的办法就是想办法绕过它。为什么你认为你需要这个?为什么需要40种不同的功能?为什么没有一个功能可以处理所有40种情况?如果您能更深入地了解您正在尝试的具体内容,我相信可以找到一个类似的替代方案。如果必须这样做,请将对函数的引用存储在列表或字典中。@mhs:如果您有40倍相同的函数,那么这就是设计的味道。改为改进您的设计。谢谢!你的回答帮了我很大的忙,这正是我想要的。我强烈建议其他人不要这样做。如果您必须生成单独的函数,请使用。我同意dano的观点,这绝对不是一个好主意。OP想要做的一开始甚至不是一个聪明的主意。我认为你们都是对的。这不是一个好的风格。对于任何阅读本文的人来说:不要这样做。别这样。真正地
from __future__ import print_function

for x in range(40):
    funcname = "functionname" + str(x)
    function = lambda x=x: print(x)
    locals()[funcname] = function