为什么这个代码打印一次“马铃薯”而不是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 )
答案 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)