2013-09-24 3 views
3

Я пытаюсь обойти эту тему.Передача функции в качестве аргументов в python

Итак, вот что я хочу: У меня есть три функции. сказать, Foo, бар и 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) 

Я прошел функцию в качестве параметра для себя, потому что ваш foo и bar принимать аргументы , но ничего не делать с ними.

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') 
Смежные вопросы