迭代器

Posted majintao

tags:

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

1.函数名

  一.函数名的运用

  函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量

  1.函数名的内存地址

技术分享图片
def func():
    print("呵呵")

print(func)

结果:
<function func at 0x1101e4ea0>
View Code

  2.函数名可以赋值给其他变量

技术分享图片
def func():
    print("呵呵")


print(func())

a = func    #把函数当成一个变量赋值给另一个变量
a()          #函数调用 func()
View Code

  3.函数名可以当作容器类的元素

技术分享图片
 1 def func1():
 2     print("呵呵")
 3 
 4 
 5 def func2():
 6     print("呵呵")
 7 
 8 
 9 def func3():
10     print("呵呵")
11 
12 
13 def func4():
14     print("呵呵")
15 
16 
17 lst = [func1, func2, func3]
18 for i in lst:
19     i()
View Code

  4.函数名可以当作函数的参数

技术分享图片
 1 def func():
 2     print("吃了吗")
 3 
 4 
 5 def func2(fn):
 6     print("我是func2")
 7     fn()     #执行传递过来的fn
 8     print("我是func2")
 9 
10 
11 func2(func)            #把函数func当成参数传递给func2的参数fn
View Code

  5.函数名可以作为函数的返回值

技术分享图片
 1 def func_1():
 2     print("这里是函数1")
 3 
 4     def func_2():
 5         print("这里是函数2")
 6 
 7     print("这里是函数1")
 8     return func_2()
 9 
10 
11 ret = func_1()   #执行函数1,函数1返回的是函数2,这时ret指向的就是上面函数2
12 ret()        #执行上面返回的函数
13                 
View Code

2.闭包

   什么就是闭包?闭包就是内层函数,对外层函数(非全局)的变量的引用.叫闭包

技术分享图片
def func1():
        name = "alex"

        def func2():
                print(name) # 闭包

        func2()


func1()

结果:
alex
View Code
   我们可以使用__closure__来检测函数是否是闭包.使用函数名.__closure__返回cell就是闭包,返回None就不是闭包
技术分享图片
def func1():
        name = "alex"

        def func2():
            print(name)   #闭包

        func2()
        print(func2.__closure__)  #(<cell at 0x0000019E0E3164C8: str object at 0x0000019E0E3A8148>,)



func1()
View Code

  问题,如何在函数外边调用内部函数

技术分享图片
 1 def outer():
 2     name = "alex"
 3 
 4     # 内部函数
 5     def inner():
 6         print(name)
 7 
 8     return inner
 9 
10 
11 ret = outer()            #访问外部函数,获取到内部函数的函数地址
12 ret()                #访问内部函数
13                 
View Code

那如果多层嵌套呢?很简单,只需要一层一层的往外返回就行了

技术分享图片
 1 def func1():
 2     def func2():
 3         def func3():
 4             print("嘿嘿")
 5 
 6         return func3
 7 
 8     return func2
 9 
10 
11 func1()()()
View Code

 

 

3.迭代器

 

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

VSCode自定义代码片段6——CSS选择器

行历史查看器 - Git

持久片段和查看器

损坏的顶点和片段着色器

python使用上下文对代码片段进行计时,非装饰器

设计模式迭代器模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )