运行 随机选择的函数有更好的方法吗?
Is there a better way to run a randomly chosen function?
我制作了一个井字游戏,对于我制作的一个 AI,它选择了一个用引号括起来的随机函数(因此它是一个字符串)并对其调用 eval()
。这是它的样子:
import random
func_list = ["func1()", "func2()", "func3()"]
eval(random.choice(func_list))
我不太喜欢使用 eval()
(不太清楚为什么,只是看起来不对)。我也不喜欢将函数作为字符串放在列表中。 有更好的方法吗?
您可以使用 locals
访问随机选择的函数 -
locals()[random.choice(func_list)]()
如果函数在同一个模块中,locals
有效。
如果您调用的函数来自另一个模块,您也可以使用 getattr
import module_name
getattr(module_name, random.choice(func_list))
函数是 Python 中的第一个 class 个对象。这意味着您可以传递它们,也可以将它们存储在列表中,就像任何其他对象一样。
那为什么不这样做呢?
func_list = [func1, func2, func3]
random.choice(func_list)()
在 Python 中,函数是对象,您可以存储对它们的引用。然后您可以使用引用调用它们,只要它们都可以处理相同的参数列表。
import random
def revlist(mylist):
return mylist[::-1]
func_list = [list, set, tuple, revlist]
f = random.choice(func_list)
x = f([1,2,3,4,5,1])
print x
每次执行此操作时,您将随机获得 list
、set
、tuple
或反向列表。
跳过评估并直接存储您的函数:
import random
func_list = [func1, func2, func3]
random.choice(func_list)()
func_list = [func1, func2, func3]
random.choice(func_list)()
您可以直接将函数放在列表中。
在Python中,函数是一级对象。把函数放在列表里直接调用就可以了
def a(): pass
def b(): pass
funcs = [a,b]
# call function 'a'
funcs[0]()
我制作了一个井字游戏,对于我制作的一个 AI,它选择了一个用引号括起来的随机函数(因此它是一个字符串)并对其调用 eval()
。这是它的样子:
import random
func_list = ["func1()", "func2()", "func3()"]
eval(random.choice(func_list))
我不太喜欢使用 eval()
(不太清楚为什么,只是看起来不对)。我也不喜欢将函数作为字符串放在列表中。 有更好的方法吗?
您可以使用 locals
访问随机选择的函数 -
locals()[random.choice(func_list)]()
如果函数在同一个模块中,locals
有效。
如果您调用的函数来自另一个模块,您也可以使用 getattr
import module_name
getattr(module_name, random.choice(func_list))
函数是 Python 中的第一个 class 个对象。这意味着您可以传递它们,也可以将它们存储在列表中,就像任何其他对象一样。
那为什么不这样做呢?
func_list = [func1, func2, func3]
random.choice(func_list)()
在 Python 中,函数是对象,您可以存储对它们的引用。然后您可以使用引用调用它们,只要它们都可以处理相同的参数列表。
import random
def revlist(mylist):
return mylist[::-1]
func_list = [list, set, tuple, revlist]
f = random.choice(func_list)
x = f([1,2,3,4,5,1])
print x
每次执行此操作时,您将随机获得 list
、set
、tuple
或反向列表。
跳过评估并直接存储您的函数:
import random
func_list = [func1, func2, func3]
random.choice(func_list)()
func_list = [func1, func2, func3]
random.choice(func_list)()
您可以直接将函数放在列表中。
在Python中,函数是一级对象。把函数放在列表里直接调用就可以了
def a(): pass
def b(): pass
funcs = [a,b]
# call function 'a'
funcs[0]()