我正在使用以下代码进行练习。当我运行代码时,即使输入另一个键,似乎也可以运行超人功能。
Python3 dice.py
Select a number 1-5: 1
__pycache__ fizbuzz.py q2.py q4.py
dice.py q1.py q3.py q5.py
I AM BATMAN
即使我输入1,它也会执行subprocess.call('ls',shell = True),它只应运行Batman函数。每次输入都会发生这种情况。我得到正确的答案,但是子流程总是执行该步骤吗?即使未调用子函数,子进程也会运行吗?
import subprocess
def batman():
slogan = "I AM BATMAN"
return slogan
def superman():
subprocess.call('ls', shell=True)
return "Success!"
def dice():
user_choice = int(input("Select a number 1-5: "))
outcomes = {
1: batman(),
2: superman(),
3: "Wonder Woman",
4: "The Flash",
5: "Green Lantern"
}
answer = outcomes.get(user_choice, "Not a valid input")
return answer
print(dice())
答案 0 :(得分:1)
事实上,无论被选为谁, 超人和蝙蝠侠都会被召唤!要检查,请在蝙蝠侠的开头添加一个print('hello')
。
为什么?
好吧,一旦应用程序输入了功能骰子,它就会定义
outcomes = {
1: batman(), #Function call!
2: superman(), #Function call!
3: "Wonder Woman",
4: "The Flash",
5: "Green Lantern"
}
一旦定义结果,我们就会进行函数调用-在定义1:
时,我们会调用batman()
,括号中的内容与2:
相同-函数被求值(因此,确实运行ls
),其结果是存储('Success!'
)。问题不在子流程中,而是在应用程序设计中。选项
示例:
def dice():
user_choice = int(input("Select a number 1-5: "))
outcomes = {
1: batman,
2: superman,
3: lambda: "With our powers combined, Captain Planet!"
}
answer = outcomes.get(user_choice, lambda: "Not a valid input") #Note the default is a function now as well returning the string.
return answer() #Call here.