1. 程式人生 > >py 的 第 12 天

py 的 第 12 天

由於 多層嵌套 div 進行 str ext 叠代器 ble ins

1.函數名的使用,以及第一類對象

2。閉包

3.叠代器

一函數名的運用:

函數名是一個變量,但他是一個特殊的變量,與括號配合可以執行函數的變量。

函數名的內存地址

def 名():

  隨便什麽體

print(名)

結果是個地址

函數名可以賦值給其他變量

def 名():

  print(‘s’)

print(名)

a=名

a() 函數調用 名

3.函數名可以當作容器類的元素

def 1()

  print(s)

def 2()。。。。。

lst=【1,2,3,。。】

for i in lst

  i()

4.函數名可以當作函數的參數

def func():
print("吃了了麽")
def func2(fn):
print("我是func2")
fn() # 執?行行傳遞過來的fn print("我是func2")
func2(func) # 把函數func當成參數傳遞給func2的參數fn.
傳參什麽的

5.函數名可以作為函數的返回值

def func_1():
print("這?是函數1")
def func_2():
print("這裏是函數2")
print("這裏是函數1")
return func_2
fn = func_2() # 執?行行函數1. 函數1返回的是函數2, 這時fn指向的就是上?面函數2 fn() # 執?行行上?面返回的函數

二 閉包

什麽事閉包,閉包就是內層函數,對外層函數(非全局)的變量的引用。叫閉包

我們可以使用__closure__來檢測函數是否是閉包,使用函數名.__closure__返回cell就是閉包。返回None就不是閉包

多層嵌套就是一層一層返回沒有打印就不返回,11天寫的先可最左面的來,沒有的打印的話

由它我們可以引出閉包的好處。由於我們在外界可以訪問內部函數。那這個時候內部函數訪問的時間和時機就不一定了,因為在外部,我可以選擇在任意的時間去訪問內部函數。這個時候。想一想。我們之前說過,如果一個函數執行完畢,則這個函數中的變量以及局部命名空間中的內部都將會被銷毀,在閉包中,如果變量被銷毀了,那內部函數將不能正常執行,所以python規定。如果你在內部函數中訪問了外層函數中的變量。那麽這個變量將不會消亡,將會常駐在內存中,也就是說,使用閉包,可以保證外層函數中的變量在內存中常駐,還有一個好處就是1次常駐,萬次使用

三叠代器

我們之前一直在用可叠代對象,進行叠代操作,那麽到底什麽是可叠代對象。本小節主要討論可叠代對象。首先我們先回顧一下目前我們所熟知的可叠代對象有哪些:

str, list, tuple, dict, set.為什麽他們都是可叠代對象呢,因為他們遵循了叠代協議 這個協議我們可以用dir看一下

print(dir(XXX)) 如果裏面有__iter__那麽他就是一個可叠代對象 這是查看是否為可叠代對象的第一種方法,我們還可以通過isinstence()函數,來看一個對象是什麽類型

我們用__next__()來獲取一個叠代器中的元素,我們之前for的工作原理也是這樣


lst = [1,2,3]
lst_iter = lst.__iter__()
while True:
    try:
        i = lst_iter.__next__()
        print(i)
    except StopIteration:
        break

Iterable: 可叠代對象. 內部包含__iter__()函數
Iterator: 叠代器. 內部包含__iter__() 同時包含__next__().叠代器的特點:

1. 節省內存.
2. 惰性機制
3. 不能反復, 只能向下執?行行.

py 的 第 12 天