如何在Python中调用使变量成为可调用函数
我有一个代码,用户在其中选择要执行的函数。没有确定的功能数量,因为这些功能在将来可能会增加。我将从用户输入中获取的值存储到一个变量中。我想使变量可调用如何在Python中调用使变量成为可调用函数,python,python-3.x,function,Python,Python 3.x,Function,我有一个代码,用户在其中选择要执行的函数。没有确定的功能数量,因为这些功能在将来可能会增加。我将从用户输入中获取的值存储到一个变量中。我想使变量可调用 functions = ['add','sub','mul'] a = 10 b = 5 x = input('Choose a function : ') def add(): print(a+b) def mul(): print(a*b) def sub(): print(a-b) x() 我希望变量“x”被
functions = ['add','sub','mul']
a = 10
b = 5
x = input('Choose a function : ')
def add():
print(a+b)
def mul():
print(a*b)
def sub():
print(a-b)
x()
我希望变量“x”被调用并作为函数执行。我注意到您没有使用
函数,但您已经掌握了一些东西。它应该是函数名称的字典
def add():
...
functions = {'add': add,'sub': sub, 'mul': mul}
choice = input('Choose a function : ')
f = functions[choice]
f()
eval()
例如:
或使用用户选择步骤:
# ...
>>> func_choice = input('Choose a function: ')
Choose a function: a
>>> func = eval(func_choice)
>>> func()
a
>>>
我认为,正确的解决办法是。它还为您提供了一些灵活性,可以为函数指定不同的字符串关键字。代码:
def add(a, b):
print(a + b)
def mul(a, b):
print(a * b)
def sub(a, b):
print(a - b)
functions = {
'add': add,
'sub': sub,
'mul': mul
}
a = 10
b = 5
x = input('Choose a function : ')
if x not in functions:
print(f"Function \"{x}\" is not defined.")
else:
functions[x](a, b)
但如果您认为100%有必要通过字符串名调用函数,则可以从以下位置获取对函数的引用:
可以将函数指定给变量x=add
然后可以调用x作为函数x(1,2)
TypeError:'str'对象是不可调用的。从技术上讲,使用eval
通常不是一个好主意。当涉及到用户输入时,使用eval()是否正确?这有潜在的风险,特别是我在这里展示的方式。但是,如果您信任用户并验证输入,则可以使用它,特别是在需要很大灵活性的地方(例如,在开发过程中)。@Ayussingh,您可以轻松地将eval(func_name)
替换为globals()[func_name]()
,这将更加“安全”。
def add(a, b):
print(a + b)
def mul(a, b):
print(a * b)
def sub(a, b):
print(a - b)
functions = {
'add': add,
'sub': sub,
'mul': mul
}
a = 10
b = 5
x = input('Choose a function : ')
if x not in functions:
print(f"Function \"{x}\" is not defined.")
else:
functions[x](a, b)
func = globals().get(x, None)
if not x:
print(f"Function \"{x}\" is not defined.")
else:
func(a, b)