我正在学习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
在试图理解正在发生的事情时,我试图构建一个如书中所描述的堆栈图。在这里:
你能解释一下错误信息和堆栈图上的注释吗?你知道吗
谢谢你的建议。你知道吗
do_twice
获取第一个参数的函数,不返回任何内容。所以没有理由传递do_twice
的结果。你需要传递它a function
。你知道吗这就是你的意思:
非常类似于您通过
f
定义do_twice
略微重写:
将返回值
do_twice(...)
作为第一个参数传递给do_twice(...)
。这个参数应该是一个函数对象。do_twice
不返回任何内容,因此result
是None
,您传递的是它而不是预期的函数对象。你知道吗以任何方式嵌套这两个
do_twice
都没有意义。你知道吗不能将
do_twice(f,v)
作为函数参数传递,因为它不返回任何内容。你知道吗相关问题 更多 >
编程相关推荐