2018.8.10 python中的叠代器
阿新 • • 發佈:2018-08-10
執行 name closure col 呵呵 使用 tro 嘻嘻 官方
主要內容:
1、函數名的使用
2、閉包
3、叠代器
一、函數名的運用
函數名是一個變量,但他是一個特殊的變量,與括號配合可執行函數的變量。
1、函數名的內存地址
def func():
print(‘呵呵‘)
print(func)
#結果
# <function func at 0x000000000215D7B8>
2、函數名可以賦值給其它變量
def func():
print(‘呵呵‘)
print(func)
a = func
a()
3、函數名可以當做容器類的元素
def func1():
print("我是1")
def func2():
print("我是2")
def func3():
print("我是3")
lst = [func1, func2, func3]
for el in lst:
el()
4、函數名可以當做函數的參數
def func():
print(‘吃了麽‘)
def func2(fn):
print(‘我是func2‘)
fn()
print(‘我是func2‘)
func2(func)
5、函數名可以作為函數的返回值
def func_1():
print(‘這裏是函數1‘)
def func_2():
print(‘這裏是函數2‘)
print(‘這裏是函數1‘)
return func_2
fn = func_1()
fn()
二、閉包
閉包就是內層函數對外層函數(非全局)的變量的引用。可以使用__closure__來檢測函數是否閉包,返回cell就是閉包,返回None就不是閉包。
def func1():
name = ‘alex‘
def func2():
print(name)
func2()
print(func2.__closure__ )
func1()
在函數外面調用內部函數:
如果是多層嵌套,需要一層一層的往外返回:
閉包的好處:
1、保護你的變量不受外部影響
2、可以讓變量常駐內存
三、叠代器
查看一個對象是否可叠代方法:
野路子:
l = [1,2,3,4]
it = l.__iter__()
print(‘__iter__‘in dir(it))
print(‘__next__‘in dir(it))
官方方法:
使用while循環+叠代器來模擬for循環:
lst = [‘哈哈‘,‘嘻嘻‘,‘啦啦‘,‘吼吼‘]
it = lst.__iter__()
while 1:
try:
el = it.__next__()
print(el)
except StopIteration:
break
總結:
Iterable:可叠代對象,內部包含__iter__()函數
Iterator:叠代器,內部包含__iter__()同時包含__next__()。
叠代器的特點:
1、節省內存
2、惰性機制
3、不能反復,只能向下執行
2018.8.10 python中的叠代器