python函數名的應用、閉包和迭代器

來源:互聯網
上載者:User

標籤:class   war   case   方法   產生   __str__   sid   sub   tar   

一、函數名的應用(第一類對象)  函數名是一個變數,但它是一個特殊的變數,與括弧配合可以執行函數變數。  1.函數名的記憶體位址
def func():    print("哈哈")print(func)  #<function func at 0x000002750A7998C8>
  2.函數名可以賦值給其他變數
def func():    print("哈哈")print(func)a = func  #把函數當成一個變數賦值給另一個變數a()     #函數調用 func()#<function func at 0x00000211E56198C8>#哈哈
  3.函數名可以當做容器類的元素
def func1():    print("哈哈")def func2():    print("哈哈")def func3():    print("哈哈")def func4():    print("哈哈")lst = [func1,func2,func3]for i in lst:    i()# 哈哈# 哈哈# 哈哈
View Code  4.函數名可以當函數的參數
def func():    print("吃了麼")def func2(fn):    print("我是func2")    fn()    print("我是func2")func2(func)        #把函數func當成參數傳遞給func2的參數fu# 我是func2# 吃了麼# 我是func2
View Code  5.函數名可以當作函數的傳回值

 

def func_1():    print("這裡是函數1")    def func_2():        print("這裡是函數2")    print("這裡是函數1")    return func_2fn = func_1()     #執行函數1,函數1返回的是函數2,這時fn指向的就是上面的函數2   fn()        #執行上面返回的函數# 這裡是函數1# 這裡是函數1# 這裡是函數2
View Code二、閉包  閉包:在內層函數中訪問外層函數的局部變數  優點:

        1保護你的變數不受外界影響

        2.可以讓變數常駐記憶體

   寫法:

      def outer():

        a = 10

        def inner():

          print(a)

        retunt inner

   判斷方法:

def func():    a = 10    def inner():        print(a)    print(inner.__closure__) # 如果列印的是None. 不是閉包. 如果不是None, 就是閉包func()
三、迭代器

    使用dir來查看該資料包含了哪些方法

print(dir(str))#結果[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getnewargs__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mod__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__rmod__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘capitalize‘, ‘casefold‘, ‘center‘, ‘count‘, ‘encode‘, ‘endswith‘, ‘expandtabs‘, ‘find‘, ‘format‘, ‘format_map‘, ‘index‘, ‘isalnum‘, ‘isalpha‘, ‘isdecimal‘, ‘isdigit‘, ‘isidentifier‘, ‘islower‘, ‘isnumeric‘, ‘isprintable‘, ‘isspace‘, ‘istitle‘, ‘isupper‘, ‘join‘, ‘ljust‘, ‘lower‘, ‘lstrip‘, ‘maketrans‘, ‘partition‘, ‘replace‘, ‘rfind‘, ‘rindex‘, ‘rjust‘, ‘rpartition‘, ‘rsplit‘, ‘rstrip‘, ‘split‘, ‘splitlines‘, ‘startswith‘, ‘strip‘, ‘swapcase‘, ‘title‘, ‘translate‘, ‘upper‘, ‘zfill‘]
View Code

    用來遍曆列表,字串,元組...等等可迭代對象

    可迭代對象:Iterable,裡面有__iter__()可以擷取迭代器,沒有__next__()

    迭代器:  Iterable,裡面有__iter__()可以擷取迭代器,還有__next__()

    迭代器的特點:

        1.只能向前

        2.惰性機制

        3.省記憶體(產生器)

    for迴圈的內部機制

        1.首先擷取到迭代器

        2.使用while迴圈擷取資料

        3.it.__next__()來擷取資料

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

s = "我是一名小畫家"it = s.__iter__()while 1:    try:        el = it.__next__()        print(el)    except StopIteration:        break# 我# 是# 一# 名# 小# 畫# 家
View Code

    判斷方法:

s = "abc"it = s.__iter__()#第一種方法print("__iter__" in dir(it))  #輸出是Ture說明是可迭代對象print("__next__" in dir(it))  #輸出是Ture說明是迭代器#第二種方法from collections import Iterablefrom collections import Iteratorprint(isinstance(it,Iterable))  #判斷是不是可迭代對象print(isinstance(it,Iterator))  #判斷是不是迭代器
View Code

 

python函數名的應用、閉包和迭代器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.