python學習第十一天,函數,閉包函數,函數名,可叠代對象與叠代器globas()l與locals()
內置函數:
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()