如果在A函数中定义了一个B函数,那么我们要如何调用这个B函数呢?
这里就引入了闭包这个概念。
满足闭包的三个条件:
- 在函数中有嵌套函数
- 外层函数的返回值是内层嵌套函数的函数名
- 内层函数对外部作用域有非全局变量的引用,即使用外层函数的参数或者是外层函数定义的变量
这样说了可能还是不太清楚,具体示例如下:
def func(num):
print('这是外层函数的输出')
def inner():
print(F'调用外层函数的参数{num}')
print('这是内层函数的输出')
return inner
f = func(3)
print(f)
print(f())
结果:
这是外层函数的输出
<function func.<locals>.inner at 0x00000152434D02F0>
调用外层函数的参数3
这是内层函数的输出
None
第一行 实例化func(),所以输出了func外层函数的print内容。
第二行输出func()的实例化对象f,发现f其实是func内部的嵌套函数inner对象
第三行则是调用inner方法,于是输出了inner()中的内容。
以上代码满足了闭包的三个条件:
- func()中有嵌套函数inner()
- func()的返回值是 inner()的函数名,而并非 inner() 的实现
- inner()中调用的是func() 接收的参数,而非外部的全局变量
最后总结一下:
如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:软件测试技术群:593462778,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
作者:暗潮汹涌
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。