Python中的函数给出错误消息

2024-04-23 21:11:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习Python,我正在阅读《思考Python》,并做一些书中包含的简单练习。你知道吗

我被要求“定义一个名为dou-four的新函数,它接受一个函数对象和一个值,并调用函数四次,将值作为参数传递。”

我试图用一个语句来编写这个函数,方法是调用一个已经定义的函数do\u tweep(),并用一个函数print\u double()来测试它。代码如下:

def do_twice(f, x): 
    f(x) 
    f(x)

def do_four(f, v):
    do_twice(do_twice(f, v), v)

def print_twice(s): 
    print s
    print s

s = 'abc'

do_four(print_twice, s)

此代码产生错误:

abc
abc
abc
abc
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-41-95b513e5e0ee> in <module>()
----> 1 do_four(print_twice, s)

<ipython-input-40-100f8587f50a> in do_four(f, v)
      1 def do_four(f, v):
----> 2     do_twice(do_twice(f, v), v)

<ipython-input-38-7143620502ce> in do_twice(f, x)
      1 def do_twice(f, x):
----> 2     f(x)
      3     f(x)

TypeError: 'NoneType' object is not callable

在试图理解正在发生的事情时,我试图构建一个如书中所描述的堆栈图。在这里:

enter image description here

你能解释一下错误信息和堆栈图上的注释吗?你知道吗

谢谢你的建议。你知道吗


Tags: 函数代码ininput定义堆栈defipython
3条回答

do_twice获取第一个参数的函数,不返回任何内容。所以没有理由传递do_twice的结果。你需要传递它a function。你知道吗

这就是你的意思:

def do_four(f, v):
    do_twice(f, v)
    do_twice(f, v)

非常类似于您通过f定义do_twice

do_twice(do_twice(f, v), v)
         ^^^^^^^^^^^^^^

略微重写:

result = do_twice(f, v)
do_twice(result, v)

将返回值do_twice(...)作为第一个参数传递给do_twice(...)。这个参数应该是一个函数对象。do_twice不返回任何内容,因此resultNone,您传递的是它而不是预期的函数对象。你知道吗

以任何方式嵌套这两个do_twice都没有意义。你知道吗

do_twice(do_twice(f, v), v)

不能将do_twice(f,v)作为函数参数传递,因为它不返回任何内容。你知道吗

相关问题 更多 >