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

返回函数的理解

def f():
   print 'call f()...'   
   def g():
       print 'call g()...'    
   return g

1、求问上述代码应该怎么理解呢? 2、为什么定义函数f()括号里面没有参数? 3、f()返回的是‘call f()...’还是g? 4、另外,x=f()为什么是调用f()?x()为什么又能直接执行g()函数定义的代码?这两者有什么区别吗?

哪位小天使能用通俗一点的语言解释一下呢?感激不尽!

正在回答

2 回答

以下是我个人的理解:

1、这是一个无参的函数 f,函数的过程输出是  'call f()...'  ,在f中定义了一个g函数作为返回的对象,返回的是指向g函数的标签引用(通俗讲就是g函数的入口地址作为了返回值)。

2、f()就是执行了函数f,返回的是函数g的引用,函数过程中输出‘call f()...’

3、x=f() 就是讲f函数的执行结果给x,即 将结果 函数g 的引用(不是g的结果)给x,此时,x是指向g函数的入口,就等于是g

4、x()就是g(),所以输出g的执行结果  'call g()...'  。这时候x 和  g 没区别,是同一个指向,相当于x是g的别名。

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

慕容6196925 提问者

谢谢!我还是不太明白,为什么这个f()函数看起来好像有两个执行结果呢?什么时候返回'call f()...',什么时候返回g?这两者有什么区别吗?求解答。
2017-07-31 回复 有任何疑惑可以回复我~
#2

小同不一 回复 慕容6196925 提问者

f()执行之后只有一个返回结果,1个,就是 return之后的g 'call f()...'不是返回结果,它只是函数在执行过程中的一条语句而已,恰巧这条语句是个print 向屏幕输出了文本,让你误以为是个返回结果。你可以把它换成X=1 ,这样你执行f() 就不会有结果输出了,实际的返回是 g 这样 就能理解了。 验证方式:再IDLE交互模式中输入 y=f() 然后回车 输入 y 不要加括号 你看y 里面是什么 ,就是g,你可以试试
2017-08-01 回复 有任何疑惑可以回复我~
#3

慕容6196925 提问者

非常感谢!
2017-08-01 回复 有任何疑惑可以回复我~

有点懵

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

举报

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

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

进入课程

返回函数的理解

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