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

时间:2017-02-18 00:38:05

标签: python function python-3.x

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

我的问题是,我知道如何在没有参数的情况下调用函数,但我不知道如何使用参数来完成它。由于(),它现在运行所有功能,但如何给它argmuents并仍然称之为?我是否必须创建一个单独的参数列表?

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]()

3 个答案:

答案 0 :(得分:4)

你想要functools.partialRewriteEngine On RewriteCond %{THE_REQUEST} /inter\.php\?pid=([^&\s]+)&title=([^\s&]+) [NC] RewriteRule ^ /%1/%2? [R=302,NE,L] RewriteRule ^(\S+)\s+(.*)$ $1-$2 [L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule ^(\S+)$ /$1 [NE,R=302,L] RewriteRule ^([^/]+)/([^/]+)/?$ inter.php?pid=$1&title=$2 [L,QSA] 非常棒,以至于我的书签中都有文档。

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)

如果您需要将8 3 13 函数的执行推迟到函数的实际执行,那么这将无法按预期工作。

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

input

然后您可以存储输入表功能而不是原始功能;

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

或者你可以写一个所谓的decorator来使它可输入:(我的书签中也有装饰器)

'aa':['does stuff', partial(inputtable, function, query=' > ')]

然后像这样存储:

def inputtable(func):

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

然后你不需要使用partial。

答案 1 :(得分:2)

另一种方法是使用lambda,它不会评估(仅编译)它们的身体,直到被调用:

`service daemon1 start`

答案 2 :(得分:0)

function_map[selection][1]( *args )是怎么做的,但是你首先要从dict中删除(20)() ...,因为它会调用函数并将其结果放入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]()