如何在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)