用n参数调用另一个函数的函数

时间:2017-05-10 20:32:11

标签: python function arguments parameter-passing

为什么这个代码打印一次“马铃薯”而不是5次?

def print_word(word):
    print word
    return


def do_n(function , n):
    for i in range(n):
       function
    return

do_n( print_word("potato") , 5 )

2 个答案:

答案 0 :(得分:1)

您的代码实际上没有通过print_word("potato")("'来电话print_word")传递给do_n,而是&# #39;自None返回print_word以来None通过。这意味着print_word运行的唯一时间是do_n( print_word("potato") , 5 )。你可以做的是使用functools.partial,它返回一个应用了args的函数:

from functools import partial

def print_word(word):
    print(word)
    return # side note: the "return" isn't necessary 


def do_n(function , n):
    for i in range(n):
       function() # call the function
    return

do_n( partial(print_word,"potato") , 5)

docs

  

返回一个新的部分对象,在调用时它的行为类似于func   使用位置参数args和关键字参数调用   关键字。如果为调用提供了更多参数,那么它们就是   附加到args。

另一种方法是使用lambda语句或单独传递参数:

def print_word(word):
    print(word)
    return # side note: the "return" isn't necessary 

def do_n(function , n):
    for i in range(n):
       function() # call the function
    return

do_n(lambda: print_word("potato"), 5) # use the lambda

或者:

def print_word(word):
    print(word)
    return # side note: the "return" isn't necessary 


def do_n(function , n, *args):
    for i in range(n):
       function(*args) # call the function
    return

do_n(print_word, 5, "potato") # pass the argument of print_word as a separate arg

答案 1 :(得分:0)

要传递带参数的函数,您可以单独传递参数,也可以执行函数的“部分”应用程序,锁定许多变量。这是解决问题的方法,我已经“部分”应用了所有变量。但是,在function()语句之前,该函数仍未被调用

from functools import partial

def print_word(word):
    print word
    return

def do_n(function, n):
    for i in range(n):
        function()
    return

print_potato = partial(print_word, potato)

do_n(print_potato, 5)