python系列教程188——内嵌函数
原创
©著作权归作者所有:来自51CTO博客作者人工智能AI技术的原创作品,请联系作者获取转载授权,否则将追究法律责任
声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!
请看下面的这个函数:
>>>def maker(N):
... def action(X): # Make and return action
... return X ** N # action retains N from enclosing scope
... return action
...
这定义了一个外部的函数,这个函数简单地生成并返回了一个嵌套的函数。如果我们调用外部的函数:
>>>f = maker(2) # Pass 2 to N
>>>f
<function action at 0x014720B0>
我们得到的是生成的内嵌函数的一个引用。这个内嵌函数是通过运行内嵌的def而创建的。如果现在调用从外部得到的那个函数:
>>>f(3) # Pass 3 to X,N remembers 2: 3 ** 2
9
>>>f(4) # 4 ** 2
16
当然,最好是简单地避免在def中嵌套def,这会让程序更加得简单。下面的代码就是前边例子的等效性形式,这段代码就避免了使用嵌套。
>>>def f1():
... x = 88 # Pass x along instead of nesting
... f2(x) # Forward reference okay
...
>>>def f2(x):
... print(x)
...
>>>f1()
88