2013-10-06 61 views
1

我想知道如果我可以创建一个函数,在它的参数中,我可以定义什么函数用于其他东西? 如:我可以为一个变量分配一个函数,以便在另一个函数中使用吗?

def askquestion(functionname): 
    userinput == str(input("Are you sure you want to run this? <y/n> ")) 
    if userinput = "y": 
     functionname() 
    elif userinput == "n": 
     print("returning to main menu") 
    else: 
     print("That is not a valid input!") 

我不知道如果我解释说,非常好,但如果你能帮助我走出这将是巨大的。

+0

in python functions are first-class-objects http://python-history.blogspot.com/2009/02/first-class-everything.html, http://www.diveintopython.net/html_processing/locals_and_globals .html – dm03514

+0

如果你的意思是你的代码可以执行,那么是的 – JadedTuna

回答

4

是的,你可以。只是通过在函数对象:

def foo(): 
    # do foo 

def bar(): 
    # do bar 

askquestion(foo) # will run foo when `y` is typed. 

Python函数是第一类对象,他们被分配到什么名字,他们被定义为开始,但你可以将它们绑定到其他的名字了。

可以,例如,将它们存储在一个映射,则基于另一个变量共查找功能映射:

map = { 
    'spam': foo, 
    'eggs': bar, 
} 

askquestion(map[anothervar]) 

askquestionfunctionname然后绑定到任何函数对象你传入在名称调用该函数后添加()

你也可以传入参数,但是全部你传入的函数必须有相同的签名。您可以将函数封装在lambda或其他函数对象中,以传入额外的参数,或者查看functools.partial()以生成具有预定义参数的可调参数。

+0

如果函数foo接受一些参数会怎样?说'def foo(blah,blahblah)' –

+0

@ ansh0l:你可以传入参数,是的;它只是一个绑定到不同名称的函数对象。 –

相关问题