Python焦点编程的四大神兽迭代器、生成器 、闭包以及装饰器

发布时间:2021-12-10 01:17 阅读次数:
本文摘要:明白闭包是明白装饰器的前提同样通过一张图来明白闭包的执行历程: 最后挪用func_1所指向的函数也就是shuoming_in()函数shuoming_in()函数内的func指向了原来func_1()所指的函数(也就是生成九九乘法表的函数)因此法式最终的效果就在九九乘法表前后各加了一个说明性字符串。

乐鱼体育官网登录

明白闭包是明白装饰器的前提同样通过一张图来明白闭包的执行历程:

最后挪用func_1所指向的函数也就是shuoming_in()函数shuoming_in()函数内的func指向了原来func_1()所指的函数(也就是生成九九乘法表的函数)因此法式最终的效果就在九九乘法表前后各加了一个说明性字符串。

使用Iterable划分判断列表字典字符串以及一个整数类型是否是可迭代工具的代码如下:

图解:Python解释器从上往下解释代码首先界说一个函数func指向了该函数(红箭头所示);接着到主函数执行第14行代码 ret = func(10)此时先执行赋值号“=”右边的内容这里挪用了函数func()并传入10这个实参函数func()代码开始执行先是打印输出“start”接着界说了一个函数func_in()func_in指向了该函数函数没有被挪用法式接着往下执行return func_in 将函数的引用返回第14行代码用ret吸收了这个返回值到此ret就指向了func_in所指向的函数体(绿箭头所示)。最后执行ret所指的函数。

这就是闭包的整个历程func_in()函数以及该函数内用到的变量num就称为闭包。

乐鱼体育官网登录

图解:跟之前一样Python解释器自上往下解释代码遇到界说函数的代码不用管因为没有挪用函数是不会执行的;这样直接就来到了第22行代码中法式先执行赋值号“=”右边的代码shuoming(func_1)挪用了之前界说的函数并传入了func_1实参法式转到shuoming(func)执行形参func吸收实参func_1此时func也指向了func_1所指向的函数(如图中分界线上方白色方框内的蓝箭头所示);在shuoming()函数中代码继续往下走在shuoming()函数内容又界说了一个shuoming_in()函数(如图中分界线上方白色方框内的蓝色方框所示)

迭代器

闭包

leyu乐鱼体育官网

到此可以看到生成器生成的值需要使用next()方法一个一个的取它不会一次性生成所有的盘算效果只有在取值时才挪用这时法式会返回盘算的一个值且法式暂停;下一次取值时从上一次中断了的地方继续往下执行。

接着往下将shuoming_in()函数的引用返回至此shuoming()函数执行完毕法式回到第22行代码执行shuoming()函数的返回值被func_1吸收此时func_1不在指向原来的函数转成指向shuoming_in所指向的函数(如图中分界线下方白色方框内的黄色箭头)。

在线客服 联系方式 二维码

电话

025-548432841

扫一扫,关注我们