11.Python初窺門徑(函數名,可迭代對象,迭代器)

Python(函數名,可迭代對象,迭代器)

1、默認參數的坑

# 比較特殊,正常來講臨時空間執行結束後應該刪除,但在這裏不是.
def func(a,l=[]):
    l.append(a)
    return l
print(func(1)) # [1]
print(func(2)) # [1,2]
print(func(3)) # [1,2,3]

2、函數名的應用

  1. 函數名指向的是函數的內存地址,加上()就執行這個函數python

    def func(args):
        return args
    print(func) # <function func at 0x00000000024656A8>
    print(func(1)) # 1
  2. 函數名是一個變量app

    def age1(a):
        return a
    age2=age1
    age3=age2
    print(age3(1)) # 1
  3. 函數名能夠做爲容器類類型的元素函數

    def func1():
     print("in func1")
    def func2():
     print("in func2")
    def func3():
     print("in func3")
    l=[func1,func2,func3]
    print(l) # [<function func1 at 0x00000000024956A8>, <function func2 at 0x0000000002495730>, <function func3 at 0x00000000024957B8>]
    for i in l:
     i()
    # in func1
    # in func2
    # in func3
  4. 函數名能夠做爲函數的實參進行傳參工具

    def func(argv):
     print(argv)
    def func1():
     print("in func1")
    def func2(argv):
     argv()
     print("in func2")
    a=1
    func(a) # 1 
    func2(func1) 
    # in func1
    # in func2
  5. 函數名能夠做爲函數的返回值code

    def func1():
     print("in func1")
    def func2(argv):
     print("in func2")
     return argv
    ret=func2(func1)
    print(ret) 
    # in func2
    # <function func1 at 0x0000000001DF56A8>

3、可迭代對象

  1. 字面意思分析 : 能夠重複迭代的實實在在的東西,list,dict,keys(),values(),tuple,str,set,range,文件句柄這些都屬於可迭代對象對象

  2. 專業角度分析 : 內部含有'_ iter _'方法的對象,就是可迭代對象索引

    內置函數 : dir()用來獲取對象內部屬性的方法,可用來判斷對象是否符合可迭代要求.內存

  3. 優勢 : 直觀,操做方法較多
  4. 缺點 : 佔用內存(字典除外),不能迭代取值,索引,字典keyit

4、迭代器

  1. 字面意思分析 : 能夠重複迭代的工具io

  2. 專業角度分析 : 內部含有'_ iter_ '而且含有'_ next _'方法的對象,就是迭代器

    可迭代對象轉化成迭代器用iter(),迭代器能夠迭代取值,利用next()進行取值,迭代器一條路走到底,不走回頭路

  3. 優勢 : 很是節省內存,惰性機制

  4. 缺點 : 不直觀,操做不靈活,效率相對低

    l1=[1,2,3,4,5]
    obj=iter(l1)
    print(next(obj)) # 1
    print(next(obj)) # 2
    print(next(obj)) # 3
    print(next(obj)) # 4
    print(next(obj)) # 5
    print(next(obj)) # 報錯

利用while循環,模擬for循環內部循環可迭代對象機制

  1. 先要將可迭代對象轉化成迭代器

  2. 利用next()對迭代器進行取值

  3. 利用異常處理try,處理報錯

    l1=[1,2,3,4,5]
    l2=iter(l1)
    while 1:
        try:
            print(next(l2))
        except StopIteration:
            pass

5、可迭代對象與迭代器對比

  1. 可迭代對象是一個操做比較靈活,直觀,效率相對較高,可是比較佔用內存的數據集
  2. 迭代器是一個很是節省內存,知足惰性機制,可是效率相對較低,操做不靈活的數據集
相關文章
相關標籤/搜索