使用列表/字典中的参数调用函数

2024-05-23 14:47:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这段代码,它根据你的输入键调用一个函数。例如,如果选择pf,它将调用pf函数,my_function(20)。在

我的问题是,我知道如何在没有参数的情况下调用函数,但我不知道如何使用参数来调用函数。由于(),它现在运行所有函数,但是我如何给它赋参数并仍然调用它?我需要创建一个单独的论点列表吗?在

function_map = {
'pf':['finds the prime factors of a number',my_function(20)]
'cs':['solves a quadratic by completing the square',m.complete_square()]
'sr':['simplifies a radical',m.simplfy_radical(input('> '))]
}

for d in function_map.keys():
  print('{} - {}'.format(d,function_map[d][0])
selection = input('Input keycode >>> ')
if selection in function_map.keys():
  function_map[selection][1]()

Tags: the函数代码inmapinput参数my
3条回答

function_map[selection][1]( *args )是怎么回事,但首先必须删除(20)()。。。从dict调用函数并将其结果放入dict中,而不是存储函数本身:然后我向列表中添加了一个额外的条目,它指定了参数的数量。在

function_map = {
'pf':['finds the prime factors of a number',my_function, 1]
'cs':['solves a quadratic by completing the square',m.complete_square, 0]
'sr':['simplifies a radical',m.simplfy_radical, 1]
}

for d in function_map.keys():
  print('{} - {}'.format(d,function_map[d][0])
selection = input('Input keycode >>> ')
if selection in function_map.keys():
  args = []
  for _ in function_map[selection][2]:
    args.append(input('Input arg>>> '))
  if args:
    function_map[selection][1]( *args )
  else:
    function_map[selection][1]()

另一种方法是使用lambda,它在调用之前不会计算(仅编译)其主体:

function_map = {
    'pf':['finds the prime factors of a number',lambda: my_function(20)]
    'cs':['solves a quadratic by completing the square',lambda: m.complete_square()]
    'sr':['simplifies a radical',lambda: m.simplfy_radical(input('> '))]
}

你想要^{}partial太棒了,以至于我的书签里都有文档。在

partial是一个返回函数的函数,但其中某些参数已经设置:

脚本

from functools import partial


def myfunc(x, y):
    print(x + y)

my_ready_func = partial(myfunc, 3)
my_ready_func(5)
my_ready_func(0)
my_ready_func(10)

输出

^{pr2}$

{cd4}函数的实际执行不需要延迟。在

您可能需要编写一个使函数“可输入”的函数:

def inputtable(func,query="Whats the argument?"):
    arg = input(query)
    return func(arg)

然后你就可以存储可输入的函数而不是原来的函数

^{4}$

或者,您可以编写一个所谓的decorator使其可输入:(我的书签中也有装饰器)

def inputtable(func):

    def wrapper():
        arg=input(' > ')
        func(arg)
    return wrapper

然后像这样储存:

'aa':['does stuff', inputtable(function)]

那么你就不需要使用partial。在

相关问题 更多 >