我有这个代码,它根据你的输入键调用一个函数。例如,如果您选择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]()
答案 0 :(得分:4)
你想要functools.partial
。 RewriteEngine 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]()