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
之前定義。避免重複的函數名稱列表。 –