Python 无法定义所需的函数
我在读一本python书,我有一个问题: 定义一个名为“do_-four”的新函数,该函数接受一个函数对象 和一个值,并调用函数四次,将该值作为 参数本报告正文中应该只有两个陈述 功能,而不是四个 我尝试过,但现在我想它应该打印16次,但每个函数体中应该有2条语句。我的代码是Python 无法定义所需的函数,python,python-2.7,function,Python,Python 2.7,Function,我在读一本python书,我有一个问题: 定义一个名为“do_-four”的新函数,该函数接受一个函数对象 和一个值,并调用函数四次,将该值作为 参数本报告正文中应该只有两个陈述 功能,而不是四个 我尝试过,但现在我想它应该打印16次,但每个函数体中应该有2条语句。我的代码是 def hello1(a, g): a(g) a(g) def hello2(ar): print (ar) print (ar) hello1(hello2, "hello") pri
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")
我得到了这个输出:
你好
你好
你好
你好
hjh
hjh
hjh
hjh
hjh
hjh
hjh
hjh
aad
aad
有人能解释一下我遗漏了什么以及我如何做到这一点吗
附言-我现在不想使用循环。我正在学习函数。描述中要求的是这样的内容
def some_func(arg):
print(arg)
def do_four(fun, arg):
for _ in range(0, 4):
fun(arg)
然后它被称为like
do_four(some_func, "foo")
此解决方案使用循环。不确定您为什么厌恶循环,这是给出描述时明确需要的
这个函数的主体中应该只有两条语句,而不是四条
如果你真的想做到这一点而没有循环(我真的不明白为什么),那么dou_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)
正如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)]
但这是一种非常丑陋的黑客行为。您需要学习如何使用循环,而不是如何编写难闻的代码。问题希望您编写一个可以这样调用的函数:
do_four( say_hello, "you" )
当你试图用另一种方式写的时候。你正在学习函数-很好!了解函数是可以传递给其他函数的东西,这是解决此问题的关键,可能也是您应该从本练习中采取的方法。使用递归:
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)
如果只需要两个语句,请使用模数:
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)
希望这能有所帮助。你好,克里斯
编辑
Sry,我没有回答这个问题(一个函数中有两条语句)您可以使用递归和可选参数来避免循环,但这需要函数中至少有3条语句:
def do_四(func,arg,repeat=4):
如果重复>0:
func(arg)
do_四(函数、参数、重复-1)
尝试使用以下代码:
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, "hello1")
print("")
def do_eight(sf):
print(sf)
print(sf)
do_four(do_eight, "hello2")
def do_eight1(a,g):
do_four(a,g)
do_four(a,g)
do_eight1(do_eight, "hello3")
def do_sixteen(add):
print(add)
print(add)
do_eight1(do_sixteen, "hello4")
def do_sixteen1(a,g):
do_eight1(a,g)
do_eight1(a,g)
do_sixteen1(do_sixteen, "hello5")
“我现在不想使用循环”-好吧,太糟糕了,因为循环就是答案。问题中没有任何东西表明你不能使用循环,这是解决问题的最简单最合乎逻辑的方法,总共只有两行代码。虽然您选择的答案中的函数只包含两行,但它们需要添加整个其他函数才能工作-我认为这违背了问题的精神(以及Python语言)。非常感谢您的帮助,但我只想通过函数来完成此操作。无循环:)@user325923请向我们解释为什么没有循环?因为我想先了解函数。我知道如何借助循环来实现这一点,但我想尝试使用函数,每个函数体中只有两条语句。这是什么?有人能解释一下吗<代码>aad aad@user325923什么是什么?你需要解释贴出的答案吗?但我认为有四种说法:DHa,我想知道这是怎么回事。一个语句和四个嵌套语句?谢谢!实际上你把函数名拼错了,比如四等于八,八等于十六,但没关系,我现在得到答案:))