1.函數名就是函數的內存地址閉包
2.函數名能夠做爲變量函數
3.函數名能夠做爲函數的參數ui
4.函數名還能夠當作函數的返回值spa
5.函數名能夠做爲容器類型的元素(列表中的一個元素)3d
globals() #做用是 返回全局變量的一個字典code
locals() # 返回當前位置的局部變量的字典對象
def func1(): a =1 b = 2 print(globals()) print(locals()) #{'b': 2, 'a': 1} func1() #{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__':
<_frozen_importlib_external.SourceFileLoader object at 0x0000026005C0D240>,
'__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__':
'G:/騎士計劃/2018-8-17/8-17草稿.py', '__cached__': None, 'lis': [1, 2, 3, 4], 'func1': <function func1 at 0x0000026005BB2EA0>} #{'b': 2, 'a': 1}
判斷這個函數是否造成了閉包,用 函數名.__closure__ 來進行判斷blog
def wraaper(): name = 'alex' def inner(): print(name) print(inner.__closure__) #輸出結果不是None,就說明造成了閉包 inner() return inner wraaper() 輸出結果#(<cell at 0x00000254669A85B8: str object at 0x0000025466A39110>,) alex
a = "alex" def func1(b): # a = "alex" #即至關於在函數內部定義了一個變量a = "alex」 def func2(): print(b) print(func2.__closure__) func2() func1(a) #運行時將外部的變量a加載到函數內 #輸出結果爲(<cell at 0x0000025E4A4285B8: str object at 0x0000025E4A4B9110>,) alex
#因此這種狀況是一個閉包
可迭代對象定義:對象內部含有__iter__方法的就是可迭代對象。(str,list,dict,tuple,tange())內存
而當可迭代對象簽定了可迭代協議就造成了迭代器it
迭代器定義:內部含有__iter__和__next__的方法就是迭代器。即存在__next__的方法就是迭代器
1.可迭代對象不能直接取值,而迭代器能夠直接取值
2.迭代器很是節省內存,
3.迭代器每次只能去一個值
4,迭代器是單向的,一直到底
1.判斷__iter__是否在這個對象裏
lis = [1,2,3] print("__iter__" in dir(lis)) #返回結果爲True則說明該對象是可迭代對象
dir() 顯示出你這個參數的全部方法,裝在一個列表裏
2.from collections import Iterable 在 文件(colletions) 導入 這個 可迭代的(Iterable)
from collections import Iterator 在文件(colletions)導入 這個 迭代器( Iterator) (自我理解,非專業術語)
from collections import Iterable from collections import Iterator print(isinstance('alex',Iterable)) # True print(isinstance('alex',Iterator)) # False 是不是迭代器 #isinstance() 判斷類型,即「alex」是否是可迭代對象 (自我解釋,非專業)
1.lis.__iter__()
2.iter(lis)
# lis = [1, 2, 3] # 可迭代對象 # # ite1 = lis.__iter__() # 迭代器 <list_iterator object at 0x0000027A183BFFD0> # ite1 = iter(lis) # 迭代器 <list_iterator object at 0x0000027A183BFFD0> # print(ite1)
lis = [1,2,3] l1 = lis.__iter__() print(l1) print(l1.__next__()) #1 print(next(l1)) #2
例題,用while循環模擬出for循環的過程(瞭解,)
# iter1 = s1.__iter__() # # while 1: # try: # print(iter1.__next__()) # except StopIteration: # StopIteration報錯緣由 # break #遇到抱歉就結束循環
先了解。