[英]Python functions recursively calling each other using dictionary storing their name
我有以下情況:
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
字典要求已經定義了函數,而對任何一個函數的第一次調用都要求已經定義了字典。 因此,您應該在所有函數定義之后和首次調用任何函數之前定義字典:
def fun1():
...
def fun2():
...
def fun3():
...
def fun4():
...
funcDict = {"fun1": fun1,
"fun2": fun2,
"fun3": fun3,
"fun4": fun4}
fun1()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.