为了账号安全,请及时绑定邮箱和手机立即绑定

IDLE返回print内容不是function name

请问为什么以下最后返回的print内容不是'call function...'呢?

http://img1.sycdn.imooc.com//5e3d69770001f41803300182.jpg

正在回答

2 回答

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所在的位置

0 回复 有任何疑惑可以回复我~
#1

qq_慕少2210022

那如果是想要返回'call'+f.__name__+'()' 再加上x*2的值可以返回吗
2020-02-19 回复 有任何疑惑可以回复我~

new_fn函数return fn, 就返回一个函数fn, 你这里传入abs(1)就没有按照你定义的new_fn来进行参数传入,应该接收一个函数名作为参数,然后赋值给一个变量,这样比较‘优雅’,f = new_fn(abs), print(f)将会打印你如图所示长字符, print(f(-1))注意f其实就是指向返回的函数, 会打印出内部函数最终的返回结果, call abs..., 这里注意f和f( )的区别, 一个是函数, 一个是调用函数

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

IDLE返回print内容不是function name

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信