我有一个调用函数的变量列表。这些变量的编号从1到5,每个整数应调用一个函数以收集所需的信息。选择变量的方法是通过控制台输入,即input(“ Select a Number”)
答案 0 :(得分:0)
如果您想要一种将数字与函数关联的方法,我认为最简单的方法就是使用列表。列表正是这样做的...将对象与数字索引(列表中的位置)相关联。相对于其他方法,此方法的一个优点是,在列表中添加和删除函数时,您的代码不必更改,因为它可以将逻辑基于列表的长度。
下面是一个示例,该示例在给定数字作为输入的情况下调用特定函数:
def function1():
print("I am function 1")
def function2():
print("I am function 2")
def function3():
print("I am function 3")
def function4():
print("I am function 4")
def function5():
print("I am function 5")
functions = [function1, function2, function3, function4, function5]
f = input("Enter a number between 1 and {} > ".format(len(functions)))
try:
i = int(f)
if i < 1 or i > len(functions):
print("There's no function with number " + f)
else:
functions[i-1]()
except ValueError:
print("Invalid Input")
您可以使用lambda(匿名)函数来更紧凑地执行相同的操作。由于您是按数字引用功能,因此它们不需要名称:
functions = [
lambda: print("I am function 1"),
lambda: print("I am function 2"),
lambda: print("I am function 3"),
lambda: print("I am function 4"),
lambda: print("I am function 5")
]
f = input("Enter a number between 1 and {} > ".format(len(functions)))
try:
i = int(f)
if i < 1 or i > len(functions):
print("There's no function with number " + f)
else:
functions[i-1]()
except ValueError:
print("Invalid Input")
鉴于lambda会将您限制为一个表达式,并且我假设您需要更复杂的功能,所以我猜第一个版本就是您想要使用的版本。
答案 1 :(得分:0)
如果您只想在获取数字后执行功能,则可以尝试伪 switch 子句:-
def switch(i):
py_switch = {
1: lambda: function1(),
2: lambda: function2(),
3: lambda: function3(),
4: lambda: function4(),
5: lambda: function5(),
}
function = py_switch.get(i)
function()
choice = int(input("Enter your choice = "))
switch(choice)
这类似于switch子句(可在C ++,Java等语言中找到),接受单个输入并根据输入值提供输出。
要实现比大多数程序中常见的普通if-else
阶梯要难一些。