Python 无法定义所需的函数

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

我在读一本python书,我有一个问题:

定义一个名为“do_-four”的新函数,该函数接受一个函数对象 和一个值,并调用函数四次,将该值作为 参数本报告正文中应该只有两个陈述 功能,而不是四个

我尝试过,但现在我想它应该打印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")
我得到了这个输出:

你好 你好 你好 你好 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,我想知道这是怎么回事。一个语句和四个嵌套语句?谢谢!实际上你把函数名拼错了,比如四等于八,八等于十六,但没关系,我现在得到答案:))