我有一个代码,用户可以在其中选择要执行的功能。由于未来功能可能会增加,因此功能尚不明确。我将从用户输入中获取的值存储到变量中。我想使变量可调用。
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'被调用并作为函数执行。
答案 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
>>>