迭代器

 迭代器

一.函數名的應用python

  函數名是一個變量,但它是一個特殊的變量,與括號配合能夠執行函數閉包

  1.函數名的內存地址函數

1
2
3
4
def  func():   
     print ( "呵呵" )
print (func)
結果: <function func at  0x1101e4ea0 >

  2.函數名能夠賦值給其餘變量post

1
2
3
4
def  func():   
     print ( "呵呵" )
print (func) a  =  func     # 把函數當成一個變量賦值給另外一個變量
a()      # 函數調用 func()

  3.函數名能夠當作容器類的元素spa

1
2
3
4
5
6
7
8
9
10
11
def  func1():      
      print ( "呵呵" )
def  func2():   
     print ( "呵呵" )
def  func3():   
     print ( "呵呵" )
def  func4():   
     print ( "呵呵" )
lst  =  [func1, func2, func3]    
for  in  lst:  
     i()                     #調用函數

  4.函數名能夠當作函數的參數code

1
2
3
4
5
6
7
def  func():   
     print ( "吃了麼" )
def  func2(fn):   
     print ( "我是func2" )   
     fn()     # 執行傳遞過來的fn   
     print ( "我是func2" )
func2(func)      # 把函數func當成參數傳遞給func2的參數fn.

  5.函數名能夠做爲函數的返回值對象

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

  二.閉包:閉包就是內層函數,對外層函數(非全局)的變量的引用.blog

   好處:  內存

     1.保護變量不受外界影響ci

     2.能夠讓變量常駐內存

1
2
3
4
5
6
7
def  func1():   
     name  =  "alex"   
     def  func2():       
         print (name)      # 閉包   
     func2()
func1()
結果: alex   

  能夠使用__closure__來檢測函數是不是閉包.返回cell就是閉包,返回None就不是閉包.

1
2
3
4
5
6
7
def  func1():   
     name  =  "alex"   
     def  func2():       
         print (name)      # 閉包   
     func2()   
     print (func2.__closure__)     # (<cell at 0x10c2e20a8: str object at 0x10c3fc650>,)
func1()

  在函數外部調用內部函數

1
2
3
4
5
6
7
def  outer():   
     name  =  "alex"     # 內部函數   
     def  inner():       
         print (name)   
     return  inner
fn  =  outer()    # 訪問外部函數, 獲取到內部函數的函數地址
fn()     # 訪問內部函數

  多層嵌套時,一層一層返回便可

1
2
3
4
5
6
7
def  func1():
     def  func2():
         def  func3():
             print ( "嘿嘿" )
         return  func3
     return  func2
func1()()()

  Python中規定,若是你在內部函數中訪問了外層函數中的變量,那麼這個變量將不會消亡,將會常駐內存中.

  三.迭代器

    可迭代對象:Iterable,裏面有__iter__()能夠獲取迭代器,沒有__next__()

    迭代器:       Iterator,裏面有__iter__()能夠獲取迭代器,還有__next__()

    迭代器的特色:

      1.只能向前

      2.惰性機制

      3.省內存(生成器)

    能夠經過dir函數查看類中定義好的方法

1
2
3
4
=  "個人哈哈哈"
print ( dir (s))        # 能夠打印對象中的方法和函數
 
print ( dir ( str ))      # 也能夠打印類中聲明的方法和函數

  可迭代對象能夠使用for循環

  打印的結果中能找到__iter__函數,則是可迭代對象

  也能夠經過isinstance()函數查看對象是否是可迭代對象

1
2
from  collections  import  Iterable   # 可迭代對象
from  collections  import  Iterator     # 迭代器
lst = ["alex爲何這麼帥","我不信","大家信嗎?"]
1
print ( isinstance (lst, Iterable)) <br> print ( isinstance (lst, Iterator))

  可迭代對象能夠經過.__iter__()獲取迭代器

  for循環的內部機制

    1.首先獲取到迭代器.

    2.使用while循環獲取數據

    3.it.__next__()獲取數據

    4.處理異常 try: xxx  except StopIteration:

1
2
3
4
5
6
7
8
lst  =  [ "alex" "wusir" "taibai" "ritian" ]
it  =  lst.__iter__()  # 獲取迭代器
while  1 :
     try :     # 嘗試執行
         el  =  it.__next__()   # 獲取下一個元素
         print (el)
     except  StopIteration:    # 處理錯誤
         break
相關文章
相關標籤/搜索