迭代器
Posted majintao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器相关的知识,希望对你有一定的参考价值。
1.函数名
一.函数名的运用
函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量
1.函数名的内存地址
def func(): print("呵呵") print(func) 结果: <function func at 0x1101e4ea0>
2.函数名可以赋值给其他变量
def func(): print("呵呵") print(func()) a = func #把函数当成一个变量赋值给另一个变量 a() #函数调用 func()
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()
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
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
2.闭包
什么就是闭包?闭包就是内层函数,对外层函数(非全局)的变量的引用.叫闭包
def func1(): name = "alex" def func2(): print(name) # 闭包 func2() func1() 结果: alex
我们可以使用__closure__来检测函数是否是闭包.使用函数名.__closure__返回cell就是闭包,返回None就不是闭包
def func1(): name = "alex" def func2(): print(name) #闭包 func2() print(func2.__closure__) #(<cell at 0x0000019E0E3164C8: str object at 0x0000019E0E3A8148>,) func1()
问题,如何在函数外边调用内部函数
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
那如果多层嵌套呢?很简单,只需要一层一层的往外返回就行了
1 def func1(): 2 def func2(): 3 def func3(): 4 print("嘿嘿") 5 6 return func3 7 8 return func2 9 10 11 func1()()()
3.迭代器
以上是关于迭代器的主要内容,如果未能解决你的问题,请参考以下文章