2013-09-24 276 views
3

我想讓我的頭繞過這一個。傳遞函數作爲python參數

所以這裏是我想要做的: 我有三個功能。 說,富,酒吧和foo_bar這樣的

def foo_bar(function): 
    for i in range(20): 
     function # execute function 
def foo(someargs): 
    print "hello from foo" 

def bar(someargs): 
    print " hello from bar" 

,當我做foo_bar(foo)# how to specify arguments to foo??

我期待,我看到"hello from foo" 20 times

但是因爲我沒有看到..我清楚地不明白這個好嗎?

回答

5

你沒有調用函數。你叫一個名爲function功能用括號()以下名稱function,而那些括號內你把你需要的任何參數:

function(function) 

我通過函數作爲參數傳遞給自己,因爲你的foobar帶參數,但對他們無所作爲。

2

這應該做基本上你想要什麼:

def foo_bar(function): 
    for i in range(20): 
     function(i) # execute function 
def foo(someargs): 
    print "hello from foo" 

def bar(someargs): 
    print " hello from bar" 

foo_bar(foo) 
foo_bar(bar) 
2

該文檔對此here的部分。您很可能希望構建foo_bar作爲

def foo_bar(function, *func_args): 
    for i in range(20): 
     function(func_args) 

def foo(a): 
    print "hello %s"%a 

然後,您可以把它作爲

foo_bar(foo, 'from foo!') 
0

我會讓foo_bar這樣的名稱返回接受參數的函數傳遞給內部函數:

def foo_bar(fn, n=20): 
    def _inner(*args, **kwargs): 
     for i in range(n): 
      fn(*args, **kwargs) 
    return _inner 

,並調用它像:

foo_bar(foo)('some_param')