我正在阅读一本蟒蛇书,我得到了一个问题:
定义一个名为" do_four"的新函数。它接受一个函数对象 和一个值并调用该函数四次,将值作为a传递 参数。在这个问题上应该只有两个陈述 功能,而不是四个。
我试过但现在我想它应该打印16次,但每个功能的主体应该有2个声明。我的代码是
def hello1(a, g):
a(g)
a(g)
def hello2(ar):
print (ar)
print (ar)
hello1(hello2, "hello")
print("")
def do_four(a, g):
hello1(a, g)
hello1(a, g)
do_four(hello2, "hjh")
print("")
def hello3(a, g):
print (a, g)
print (a, g)
hello3(do_four, "aad")
我得到了这个输出:
hello
hello
hello
hello
hjh
hjh
hjh
hjh
hjh
hjh
hjh
hjh
<function do_four at 0x1056a9840> aad
<function do_four at 0x1056a9840> aad
有人可以解释我错过了什么,以及我该怎么做?
P.S。 - 我现在不想使用循环。我正在学习各种功能。
答案 0 :(得分:7)
描述所要求的是这样的
def some_func(arg):
print(arg)
def do_four(fun, arg):
for _ in range(0, 4):
fun(arg)
然后它被称为
do_four(some_func, "foo")
此解决方案使用循环。不确定为什么你厌恶循环,这明确地说明了描述
这个函数的主体应该只有两个语句,而不是四个。
如果你真的想在没有循环的情况下这样做(我真的不明白为什么),那么do_four
就像
def do_four(fun, arg):
fun(arg)
fun(arg)
fun(arg)
fun(arg)
修改强>
如果你真的想在没有循环的情况下这样做,并且每个函数只需要2个语句,那么你可以做...
def do_two(fun, arg);
fun(arg)
fun(arg)
def do_four(fun, arg):
do_two(fun, arg)
do_two(fun, arg)
答案 1 :(得分:2)
正如user2357112所说,你需要使用一个循环:
def do_four(fun, value):
for _ in range(4):
fun(value)
编辑:没有循环,你可以做这个黑客:
def do_four(fun, value):
[fun(value), fun(value), fun(value), fun(value)]
但这是一个 非常丑陋的 黑客。你需要学习如何使用循环,而不是如何编写臭代码。
答案 2 :(得分:0)
这个问题想要你编写一个可以这样调用的函数:
do_four( say_hello, "you" )
当你试图以相反的方式写它时。你正在学习功能 - 好!理解功能是你可以传递给其他功能的东西,这是解决这个问题的关键,也可能是你应该从这个练习中采取的方法。
答案 3 :(得分:0)
使用递归:
def do_four(fn, arg, n=4):
if n:
do_four(fn, arg, n-1) or fn(arg)
或使用1行身体
def do_four(fn, arg, n=4):
not n or do_four(fn, arg, n-1) or fn(arg)
答案 4 :(得分:0)
如果您只想要两个语句,那么使用模数:
for index in range(4):
if index%2 == 0:
print("foo")
这给出了:
foo
foo
所以在你的情况下:
def some_func(arg):
print(arg)
def do_four(fun, arg):
for index in range(0, 4):
if index%2 == 0:
fun(arg)
希望这可以提供帮助。问候Chri
修改强> Sry,我没有回答这个问题(一个函数中的两个语句)
答案 5 :(得分:0)
您可以将递归与可选参数一起使用以避免循环,但这需要函数内至少3个语句:
def do_four (func, arg, repeat=4):
if repeat > 0:
func(arg)
do_four(func, arg, repeat-1)
答案 6 :(得分:0)
尝试使用此代码:
mongoimport -j 4 -d blog -c posts --drop posts.json