函数,闭包,迭代器

Posted leo-tail-x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数,闭包,迭代器相关的知识,希望对你有一定的参考价值。

函数名:函数名可以说是一个变量,但它是一个特殊的变量,因为当它与小括号配合使用时就会执行函数.

1.函数名可以放在列表中使用:

 1 def one():
 2     print(6)
 3 def two():
 4     print(66)
 5 li=[one,two]
 6 for a in li:
 7     a()
 8 
 9 输出结果:
10              6
11              66

2.函数可以当函数名的参数

 1 def one():
 2     print(6)
 3 def two(f):
 4     print(66)
 5     f()
 6 two(one)
 7 
 8 输出结果:
 9         66
10         6

3.函数可以作为函数的返回值:

 1 def one():
 2     print(6)
 3     def two():
 4         print(66)
 5     return two
 6 f=one()
 7 f()
 8 
 9 输出结果:
10         6
11         66

闭包:内层函数对外层函数变量的引用

python规定:如果你在内层函数中访问了外层函数的变量,那么这个变量在使用完并不会马上清空,它将会长期存储到内存中,可以方便你以后再次调用.

1 def one():
2     a=6
3     def two():
4         print(a)
5     return two

这种内层函数需要外层函数的变量时就产生了闭包,

当程序检测到内部函数会用到外部函数的变量时,就会将变量存储到内存中,方便外层函数结束时,内层函数也能正常调用

可迭代对象:Iterable,里面有__iter__()可以获取迭代器,没有__next__()  (注意每处下划线都是两个)

  迭代器:Iterator,里面有__iter__()可以获取迭代器,有__next__()

用迭代器模拟for循环:

1 #                        #列如我们要循环一个列表
2 a=[1,2,3]
3 li=a.__iter__()#首先获取到迭代器
4 while 1:          #使用while循环获取数据
5     try:            #尝试运行
6         li2=li.__next__()    #通过迭代器获得一个数据
7     except StopIteration:   #处理异常,只能处理写上的异常如(StopIteration)
8         break                        #如果出现这种异常则结束

 

以上是关于函数,闭包,迭代器的主要内容,如果未能解决你的问题,请参考以下文章

python中的闭包,迭代器.

Python概念之装饰器迭代器生成器

闭包迭代器

装饰器生成器迭代器

函数闭包,装饰器,迭代器

Rust编程语言入门之函数式语言特性:-迭代器和闭包