1. 程式人生 > >python學習第十一天,函數,閉包函數,函數名,可叠代對象與叠代器globas()l與locals()

python學習第十一天,函數,閉包函數,函數名,可叠代對象與叠代器globas()l與locals()

技術 占用內存 oba lob port 調用 def 內置函數 報錯

內置函數:

dir(str)或dir(‘alex‘) --->看該類型內置的方法有哪些,返回一個列表

dict.__iter__() 或 iter(dict) --->將可叠代對象轉換為叠代器

iter1.__next__() 或 next(iter1)--->將叠代器裏面的元素一一輸出

globals()

locals()

引入模塊判斷某個對象是否是可叠代對象,或是叠代器

from collections import Iterator

print(isinstance(‘alex,Iterator))---->判斷是否是叠代器

from collections import Iterable

print(isinstance(‘alex‘,Iterable))--->判斷是否是可叠代對象

跳過Bug:

try: #跳過報錯

  pass

expect StopIteration

  pass

1.break 打破for循環

list1 = [1,2,3]
for i in list1:
    print(i)
    if i == 1:
        break

2.函數的理解:

  內置函數

  自定義函數:一般用完即在內存中清除,除了閉包函數

    python可以非常靈活地自定義函數,函數可以被多次調用

3.函數名(函數對象)的應用場景:函數名指向函數的內存地址,函數名加括號就是函數的調用

------->函數名是第一類對象

  a.函數名可以作為值,被賦值給另外一個變量(一般調用函數時用)

def func():
    pass
f = func
f()

  b.函數名可以作為函數的參數(在函數中調用另外一個函數用)

def func1():
    print(666)
def func2(s):
    s()
func2(func1)

  c.函數名可以當做函數的返回值(閉包函數時)

def wraaper():
    def inner():
        print(666)
    return inner
ret = wraaper()
ret()

  d.函數名可以當做容器類類型裏面的元素(一次性調用多個函數)

技術分享圖片
def func1():
    print(1)
def func2():
    print(2)
def func3():
    print(3)
list1 = [func1,func2,func3]
for i in list1:
    i()
技術分享圖片

3.閉包函數:

  運用:爬蟲,裝飾器

  

4.globals()與locals()

  加括號的叫做函數:globals(),locals()

  不加括號的叫做屬性global,nonlocal

    區分:

      globals():僅返回全局的和內置的變量,構成一個字典

      local():返回當前位置的變量,構成一個字典  

技術分享圖片
def func1():
    a = 2
    b = 3
    print(globals())
    print(locals())
    def inner():
        c = 5
        d = 6
        print(globals())
        print(locals())
    inner()
func1()
技術分享圖片 技術分享圖片
def func():
    a = 3
    b = 4
    print(locals())
    print(globals())
func()
a = 1
b = 2
print(globals())
print(locals())
技術分享圖片

5.可叠代對象和叠代器(python中一切皆對象)

  可叠代對象的判斷:該對象內置有__iter__方法的,就是可叠代對象

    (str,list,dict,ret,tuple,range())

  叠代器的判斷:該對象內置有__iter__方法,和__next__方法的,就是叠代器

    (句柄f)

    1.手動轉換:

list1 = [1,2,3]
iter1 = list1.__iter__()
print(iter1.__next__())

    2.for循環自動轉換

list1 = [1,2,3]
for i in list1:
    print(i)

      用while循環模擬for循環的的自動轉換過程

技術分享圖片
list1 = [1,2,3]
iter1 = list1.__iter__()
while 1:
    try:
        print(iter1.__next__())
    except StopIteration
        break
技術分享圖片

  叠代器的特性:

    1.叠代器在內存中開辟一個內存地址,每次只取一個值:(可以處理大數據)

     然而可叠代對象在讀取時開辟N個地址,會占用內存

    2.叠代器的取值是單向的,不能倒退,可以有記錄節點的功能

python學習第十一天,函數,閉包函數,函數名,可叠代對象與叠代器globas()l與locals()