如何在Python中调用使变量成为可调用函数

时间:2019-06-03 19:49:24

标签: 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'被调用并作为函数执行。

3 个答案:

答案 0 :(得分:1)

我认为,对此的正确解决方案是dict。它还为您提供了一些灵活性,可以为函数指定不同的字符串关键字。代码:

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%必要的,则可以从globals()获取对函数的引用:

func = globals().get(x, None)
if not x:
    print(f"Function \"{x}\" is not defined.")
else:
    func(a, b)

答案 1 :(得分:0)

我注意到您没有使用functions,但是您可以继续使用。它应该是功能名称的字典

def add():
    ...

functions = {'add': add,'sub': sub, 'mul': mul}

choice = input('Choose a function : ')
f = functions[choice]

f()

答案 2 :(得分:0)

eval()可能对您有用,只是知道它允许任意代码执行,因此请小心如何允许将值传递给它。

例如:

$ python
Python 3.7.2 (default, Feb 12 2019, 08:15:36) 
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def a():
...     print('a')
... 
>>> def b():
...     print('b')
... 
>>> func = eval('a')
>>> func()
a
>>> func = eval('b')
>>> func()
b
>>> 

或通过用户选择步骤:

# ...
>>> func_choice = input('Choose a function: ')
Choose a function: a
>>> func = eval(func_choice)
>>> func()
a
>>>