1, 函式名就是函式的記憶體位址。
2, 函式名可以作為變數。
3, 函式名可以作為函式的引數。
4, 函式名可以作為容器類型別的元素。
5,函式名可以當做函式的返回值。
2:globals() locals()
globals() # 返回全域性變數的乙個字典。
locals() 返回 當前位置 的區域性變數的字典。
1 name = 'leiwenxuan'2
deffun():
3 a = 2
4 b = 356
print(globals()) #
返回的是全域性變數的字典修改其中的值,name 會發生變化
7 globals()['
name
'] = '
wuyan'8
print(name) #
此時name = wuyan
9 locals()['
a'] = 5
10print(locals()) #
輸出還是此時
11 fun()
deffunc():
name1 = '
leiwenxuan
'def
inner():
(name1)
return
inner
f = func() #
形成閉包
f()
閉包的作用:當程式執行時,遇到了函式執行,他會在記憶體中開闢乙個空間,區域性命名空間, 如果這個函式內部形成了閉包, 那麼他就不會隨著函式的結束而消失。
物件內部物件內部含有__iter__方法就是可迭代物件.可迭代物件滿足可迭代協議。
可迭代物件:str list dict,tuple,set,range()1#
print('__iter__' in dir(s1))2#
print('__iter__' in dir(dic))
1from collections import
iterable
2from collections import
iterator34
print(isinstance('
leiwenxuan
', iterator)) #
false56
print(isinstance('
leiwenxuan
', iterable)) #
true
1;可迭代物件vs迭代器:
可迭代物件不能取值,迭代器是可以取值的。
可迭代物件 --->(轉化成)迭代器
2:可迭代物件轉化迭代器:
iter1 = iter(lis)
iter2 = lis__iter()__
3:可迭代物件取值,
next() 一次取一次
iter.__next__()
4:可迭代物件的好處
1, 可迭代物件不能取值,迭代器是可以取值的。
2, 迭代器非常節省記憶體。
3,迭代器每次只會取乙個值。
4,迭代器單向的,一條路走到頭
5:自己實現for迴圈
1,將可迭代物件轉化成迭代器。
2,呼叫__next__方法取值。
3,利用異常處理停止報錯。
iter1 = s1.__iter__()
1while 1:
2try:3
print(iter1.__next__
())4
except
stopiteration:
5break
用以下兩種方式構建生成器
return and yield
return 結束函式, 給函式執行者返回值
yield 不會結束函式, 乙個next物件乙個yield給生成器物件__.next__()返回值
區別:1:記憶體級別的區別
2:迭代器是需要可迭代物件轉化, 可迭代物件是非常佔記憶體的
3:生成器直接建立, 不需要轉化, 從本質就節省記憶體。
send 與 yield
def fun():
print(1)
yield 1
print(2)
yield 2
g = fun()
g.send('alex')
#send 與 next 一樣, 也是對生成器取值(執行乙個yield)的方法
#send 可以給上乙個yield傳值
#第一次永遠都是next
#最後乙個yield永遠也得不到send傳的值
列表推到式:一行**搞定你需要的任何列表
#迴圈模式 [變數 (加工後的變數) for ]
lis = [i for i in range(1,101)]
#篩選模式[變數 (加工後的變數) for i in name if 條件]
列表推導式:
優點:一行解決 , 方便
缺點:容易著迷, 不易排錯, 不超過太刻意用
#列表推到式不能解決所有列表的問題,不要刻意去用
生成器表示式:將列表推到式的 換成()即可。
g = (i for i in range(1,10000000000000))
每次只取乙個值
python 列表推導式 生成器 迭代器
列表推導式 字典推導式和元組推導式類似 列表推導式格式 表示式 for 變數 in 可迭代 if 條件 兩個列子 乙個有if乙個沒有if list1 1,2,3 4,5,6 1,3,5 name x 2 for x in list1 結果 3,6,5 列表推導式是可以使用兩個for的 name x,...
迭代器,生成器,可迭代物件 列表推導式,列表生成式
生成器 generator 迭代器 iterator 為什麼 list dict str 等資料型別不是 iterator 結論 val i i for i in range 10 if i 2 1 只有i 2 1時,才對i進行平方操作 print val 結果 1 9,25 49,81 val i...
閉包,生成器,迭代器
函式內部再定義乙個函式並且這個函式用到了外邊的函式的變數,那麼將這個函式以及用到的一些變數稱為閉包。def line conf a,b def line x return a x b return line line1 line conf 1,1 line2 line conf 4,5 print ...