课程
/后端开发
/Python
/python进阶
请问为什么以下最后返回的print内容不是'call function...'呢?
2020-02-07
源自:python进阶 2-11
正在回答
def new_fn(f): def fn(x): print('call'+f.__name__+'()') return f(x) return fn new_fn(abs)(1)
试试
应该是abs(1)直接就是一个值,那么new_fn就当于你写的new_fn(1)此时由于fn未接收参数,对于fn内部的两句话完全没有执行,return fn直接返回fn所在的位置
qq_慕少2210022
new_fn函数return fn, 就返回一个函数fn, 你这里传入abs(1)就没有按照你定义的new_fn来进行参数传入,应该接收一个函数名作为参数,然后赋值给一个变量,这样比较‘优雅’,f = new_fn(abs), print(f)将会打印你如图所示长字符, print(f(-1))注意f其实就是指向返回的函数, 会打印出内部函数最终的返回结果, call abs..., 这里注意f和f( )的区别, 一个是函数, 一个是调用函数
举报
学习函数式、模块和面向对象编程,掌握Python高级程序设计