全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域称为局部变量,定义在函数外的拥有全局作用域称为全局变量。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
当全局变量与局部变量同名时,在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用
如果想在全局作用域调用局部变量可以使用global
未声明全局变量之前
声明全局变量之后
注意:虽然python提供这种方法可以从局部作用域中声明全局变量,但是不建议这样使用,全局变量只在全局作用域中定义
嵌套函数
顾名思义,嵌套函数就是指,函数内部套函数
递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出,所以递归必须有一个明确的结束条件
高阶函数
变量可以指向函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
把abs作为参数传入sum
匿名函数
当我们在传入函数时,有些时候,不需要显式地定义函数,匿名函数就是不需要显式的指定函数。
第一种函数换成匿名函数的定义方法
关键字lambda表示匿名函数,冒号前面的n表示函数参数。匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。
列表生成式
列表生成式是Python内置的非常简单却强大的可以用来创建list的生成式
举个例子,要生成list[1,2,3,4,5,6,7,8,9]可以使用list(range(1,10))。
但如果要生成[1x1, 2x2, 3x3, ..., 10x10],可以使用循环,但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list
生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量是有限的。所以,如果列表元素可以按照某种算法推算出来,在Python中,这种一边循环一边计算的机制,称为生成器:generator。
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改为()
生成器(generator)可以通过next()函数获取返回值,或者__next__()内置方法
获取生成器元素的方法
generator保存的是算法,每次调用next(),就会获取下一个元素,直到计算到最后一个元素,没有更多的元素时
StopIteration错误
我们创建了一个generator后,基本上永远不会调用next()而是通过for循环来迭代它,并且不需要关心StopIteration错误,因为generator也是可迭代对象。
第二种方法
这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator,generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
迭代器
可以直接作用于for循环的数据一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator function,这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
可以使用isinstance()判断一个对象是否是Iterable对象
而可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
如果觉得《python函数参数生成器_python函数补充 生成器 迭代器》对你有帮助,请点赞、收藏,并留下你的观点哦!