1. 程式人生 > >2018.8.10 python中的叠代器

2018.8.10 python中的叠代器

執行 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中的叠代器