def func1(): print('你是誰,你來自哪裏') print(func1) # <function func1 at 0x000001256F021E18>
二、函數名能夠賦值給其餘變量 網絡
def func1(): print('這是函數1') # print(func1) res = func1 # 把函數當成一個變量賦值給另外一個變量 res() # 函數調用 func1() # 這是函數1
三、函數名能夠看成容器類的元素 閉包
def func1(): print('大風吹1') def func2(): print('大風吹2') def func3(): print('大風吹3') def func4(): print('大風吹4') lst = [func1,func2,func3,func4] for i in lst: i()
四、函數名能夠看成函數的參數進行傳遞 app
def func1(): print('這兩天降溫了') def func2(fn): print('我是函數2') fn() print('我是函數2') func2(func1)
def func1(): print('哈哈') def func2(): print('嘿嘿') def func3(): print('呵呵') # 代理裝飾器雛形 def proxy( a ): # a 就是變量,形參 print('我是代理') a() print('代理完畢') proxy(func1) proxy(func2) proxy(func3)
五、函數名能夠做爲函數的返回值 函數
def func1(): print('這是函數1') def func2(): print('這是函數2') return func2 fn = func1() # 執行函數1,函數1返回的是函數2,這時fn之想的就是函數2 fn() # 執行上面返回的函數(也就是函數2)
def wapper(): name = '昂昂' # 局部變量常駐於內存 def inner(): print(name) # 在內層函數中調用外層函數的局部變量 return inner # 返回內部函數名 res = wapper() # res 是一個內層函數 res() # res 就是inner,執行的時間不肯定,必須保證裏邊的name存在
# 寫一個簡易爬蟲 from urllib.request import urlopen # 去掉數字簽名 import ssl ssl._create_default_https_contest = ssl._create_unverified_context def func(): #獲取到網頁中的內容,當網速很慢時,反覆的去打開這個網站,會很慢 content = urlopen("https://www.dytt8.net/";).read() def inner(): return content.decode("gbk") # 網頁內容 return inner print('開始網絡請求') ret = func() # 網絡請求已經完畢 print("網絡請求完畢") print("第一次",ret()[30]) print("第二次",ret()[30])
def wapper(): name = 'xiaomeng' def inner(): print('zhangying') print(inner.__closure__) inner() wapper()
是閉包 網站
def wapper(): name = 'xiaomeng' def inner(): print(name) print(inner.__closure__) # (<cell at 0x000001B2D03086A8: str object at 0x000001B2D03A23F0>,) inner() wapper()
s = '你是誰啊' print(dir(s)) # 能夠打印對象中的方法和函數 print(dir(str)) # 能夠打印類中申明的方法和函數
lst = [1, 2, 3] # 模擬for循環 for el in lst it = lst.__iter__() # 拿迭代器 while 1: # 循環 try: # 嘗試 it.__next__() except StopIteration: # 出現錯誤,意味着數據拿完了 break # 結束循環