我有以下情况:
if-elif
,但由于这会在所有这些函数中导致很多if-elif
,我认为我应该使用字典存储对这些函数的引用来反对它们的名称键然后散列到这个字典中(使用参数内容)来获取并调用要调用的函数。 问题在于,我无法在所有函数(所有函数将使用此字典)之前或在所有函数之后(如字典将使用所有这些函数)决定在何处定义该字典。
下面我试图模仿这个场景。我使用随机函数来决定调用哪个函数而不是从参数中推断它。我还使用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
答案 0 :(得分:0)
字典要求已定义函数,而对任何函数的第一次调用要求已定义字典。因此,您应该在之后定义所有函数定义 之前首次调用任何函数:
def fun1():
...
def fun2():
...
def fun3():
...
def fun4():
...
funcDict = {"fun1": fun1,
"fun2": fun2,
"fun3": fun3,
"fun4": fun4}
fun1()