python函数嵌套闭包_python基础—函数嵌套与闭包

python基础—函数嵌套与闭包

1、名称空间与作用域

1 名称空间分为:

1 内置名称空间   内置在解释器中的名称

2 全局名称空间   顶头写的名称

3 局部名称空间

2 找一个名称的查找顺序:先在局部名称空间找,再到全局名称空间找,再到内置名称空间

3 Globals()  查看全局名称空间的内容

Locals()   查看局部名称空间的内容

4 全局作用域包含内置名称空间和全局名称空间

局部作用域包含局部名称空间

1 查看内建名称空间的内容:

2 作用域

输出结果:

3 一定要注意函数要先定义,后使用

输出结果:

输出结果:

4 Globals()  查看全局名称空间的内容

Locals()   查看局部名称空间的内容

输出结果:

2、函数嵌套与静态嵌套域

嵌套调用

嵌套调用作用:将一个大的功能细化成各种小的函数功能并调用

输出结果:

在函数内定义的函数 在外面不能用到

输出结果:

#嵌套定义

x找值的过程:先在局部名称空间找,再到上一级的局部名称空间找,再到全局名称空间找,再到内置名称空间

输出结果:

3、函数对象

函数被称为第一类对象,函数可以被当做数据传递

(1)函数可以被赋值

直接输出函数名的值: 就是函数在内存中的地址

输出结果:

函数可以被赋值:将函数名代码的值赋给变量

输出结果:

(2)函数可以作为参数传递

函数可以作为参数传递

输出结果:

(3)函数可以作为返回值

函数可以作为函数的返回值

输出结果:

(4)函数可以作为容器类型的元素

函数作为字典的键的值:

4、函数闭包

(1)函数闭定义

闭包:首先必须是内部定义的函数,该函数包含对外部作用域而不是全局作用域名字的引用

定义:内部函数的代码包含对外部函数的代码的引用,但一定不是对全局作用域的引用

闭包的基本形式是:

在函数F1中,定义F2,F2只能引用F1定义的变量,之后F1函数返回F2的函数名字

这样就保证了可以将F1的执行结果赋予给一个变量,该变量可以在之后的任何时刻随时可以运行

使用闭包的好处:自带状态即变量,可以不用传参就用,方便。

闭包(closure)是函数式编程的重要的语法结构。不同的语言实现闭包的方式不同。Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们在特殊方法与多范式中,已经多次看到Python使用对象来实现一些特殊的语法)。Python一切皆对象,函数这一语法结构也是一个对象。在函数对象中,我们像使用一个普通对象一样使用函数对象,比如更改函数对象的名字,或者将函数对象作为参数进行传递。

(2)简单闭包举例

输出结果:

(3)闭包的__closure__变量

闭包都有__closure__属性

__closure__对象会返回闭包应用外围作用域的变量信息。f.__closure__保存外围作用域的变量内存地址,f.__closure__[0].cell_contents存放的是外围作用域的变量的值。

对于那些不是闭包的函数对象来说,__closure__ 属性值为 None。

输出结果:

举例:__closure__ 属性值为 None

输出结果为:

(4)闭包应用

Windows中cmd中执行pip install requests 安装requests库件

爬baidu网站的程序

将上面”爬百度”的程序修改成闭包模式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值