Python基础知识
Python闭包
概念:在一个内部函数中,对外部作用域的变量进行引用,并且一般外部函数的返回值为内部函数,那么内部函数就被认为是闭包
作用:闭包可以保存当前的运行环境,闭包在爬虫以及web应用中都有很广泛的应用,并且闭包也是装饰器的基础
理解:闭包=函数块+定义函数时的环境,inner就是函数块,x就是环境
注意:闭包无法修改外部函数的局部变量
举个例子:
在函数startAt中定义了一个incrementBy函数,incrementBy访问了外部函数startAt的变量,并且函数返回值为incrementBy函数(注意python是可以返回一个函数的,这也是python的特性之一)
1 | def startAt(x): |
Python装饰器
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象
本质上,decorator就是一个返回函数的高阶函数。
假设我们要定义一个能打印日志的decorator,代码如下:
log是一个decorator,接受一个函数作为参数,并返回一个函数。
1 | def log(func): |
调用now()函数,不仅会运行now()函数本身,还会在运行now()函数前打印一行日志:
1 | >> now() |
Python生成器
列表生成式:Python提供了生成器,使用()
,列表元素可以按照某种算法推算出来,相比于列表[]
,节省了大量空间
带有yield的函数:如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
但是每次都调用next太麻烦,可以用for循环
1 | for x in range(10)] L = [x * x |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 一知半解!