0
我有以下情形:Python函数使用字典存储他们的名字递归调用对方
- 有多个功能各接受某些参数
- 他们称之为基于参数相互递归/迭代,直到某些条件可以从参数被推断出来
- 我可以在这些函数中做
if-elif
,但是因为这会在所有这些函数中引起很多if-elif
,所以我认为我应该使用字典存储对这些函数的引用作为关键字然后哈sh到这个字典中(使用参数内容)来获取并调用要调用的函数。
问题是,我无法决定在所有函数(所有函数将使用此字典)之前或在所有函数(因为字典将使用所有这些函数)之前定义该字典的位置。
下面我试图模拟场景。我使用随机函数来决定调用哪个函数,而不是从参数中推断它。我也用recurCount
来决定何时停止递归调用。
import random
# funcDict = {"fun1": fun1,
# "fun2": fun2,
# "fun3": fun3,
# "fun4": fun4}
#Traceback (most recent call last):
# File "C:\...\temp.py", line 107, in <module>
# funcDict = {"fun1": fun1,
#NameError: name 'fun1' is not defined
funcList = ["fun1","fun2","fun3","fun4"]
recurCount = 5
def fun1():
global recurCount
print("fun1")
if(recurCount == 0):
return
else:
recurCount= recurCount-1
funcDict[random.choice(funcList)]() #recursive call
def fun2():
global recurCount
print("fun2")
if(recurCount == 0):
return
else:
recurCount= recurCount-1
funcDict[random.choice(funcList)]() #recursive call
def fun3():
global recurCount
print("fun3")
if(recurCount == 0):
return
else:
recurCount= recurCount-1
funcDict[random.choice(funcList)]() #recursive call
def fun4():
global recurCount
print("fun4")
if(recurCount == 0):
return
else:
recurCount= recurCount-1
funcDict[random.choice(funcList)]() #recursive call
fun1()
# funcDict = {"fun1": fun1,
# "fun2": fun2,
# "fun3": fun3,
# "fun4": fun4}
#Traceback (most recent call last):
# File "C:\...\temp.py", line 152, in <module>
# fun1()
# File "C:\...\temp.py", line 123, in fun1
# funcDict[random.choice(funcList)]()
#NameError: name 'funcDict' is not defined
你有没有打过电话'FUN1()之前定义''funcDict'(但你定义了所有的函数之后)? – Julien
'funcDict'没有被定义,因为它被评论。此外,您可以将'funcDict [random.choice(funcList)]()'改为'funcDict [random.choice(funcDict.keys())]()'到函数之后并在'fun1'调用 – ShabashP
之前定义。避免重复的函数名称列表。 –