日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python note 11 函数名的使用、闭包、迭代器

發布時間:2025/4/14 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python note 11 函数名的使用、闭包、迭代器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、函數名就是一個變量

def func():print("我是一個小小的函數") a = func print(a) #輸出變量存放地址 <function func at 0x00000251AD780048> func() #func()等同于a(),輸出 我是一個小小的函數

2、函數名是變量名

def func1():print("我是1") def func2():print("我是2") def func3():print("我是3") lst = [func1, func2, func3] for el in lst:el() #輸出 我是1 我是2 我是3

3、函數名可以作為參數傳遞給函數

def my():print("我是my") def proxy(fn): # 代理模式. 裝飾器print("在處理之前")fn()print("在處理之后") proxy(my) # 把函數名作為參數傳遞給另一個函數 #輸出 在處理之前 我是my 在處理之后

?

def func1():print("我是func1") def func2():print("我是func2") def func(fn, gn): # 函數名可以作為參數進行傳遞print("我是func")fn()gn()print("哈哈哈") func(func1, func2)

func()()用法

def func():print("我是func")a = 10 # 變量def inner():print("我是inner")return inner ret = func() ret() func()() # 先運行func() 然后在返回值上加(),等于上一個寫法 #輸出 我是func 我是inner

4、閉包

#閉包. 在內層函數中訪問外層函數的變量

# 閉包的作用:
# 1. 可以保護你的變量不收侵害
# 2. 可以讓一個變量常駐內存

如果不閉包全局變量是不安全的

a = 10 # 不安全的 def outer():global aa = 20 def outer_2():global aa = 30 outer_2() outer() print(a) #輸出 20 #如果交換outer_2()和outer(),那么輸出會變為30

閉包變量會常駐內存

def outer():a = 10 # 常駐內存, 為了inner執行的時候有值.def inner():print(a)return inner fn = outer() fn() # 調用的時機是不定的. #輸出 10

超簡易爬蟲

from urllib.request import urlopen def outer():# 常駐內存s = urlopen("http://www.xiaohua100.cn/index.html").read()def getContent(): # 閉包return sreturn getContent print("爬取內容.....") pa = outer() ret = pa() print(ret)

查看是否閉包

def func():a = 10def inner():print(a)print(inner.__closure__) func() # 如果打印的是None. 不是閉包. 如果不是None, 就是閉包

?

5、迭代器

#? dir查看xx類型的數據可以執行哪些方法?print(dir(str))、print(dir(list))、print(dir(int))

# 所有的帶__iter__可以使用for循環的, 可迭代對象。print(dir(int)) 沒有__iter__

# 可迭代對象可以使用__iter__()來獲取到迭代器 # 迭代器里面有__next__() # s = "石可心喜歡趙一寧" # it = s.__iter__() # 獲取迭代器 # print(dir(it)) # 迭代器里有__iter__ 還有__next__

迭代器特性

# 1. 只能向前.
# 2. 幾乎不占用內存, 節省內存(需要明天生成器)
# 3. for循環
# 4. 惰性機制 (面試題,難度系數比較高)

s = "石可心喜歡趙一寧" it = s.__iter__() # 獲取迭代器 print(it.__next__())# print(it.__next__())# print(it.__next__())# print(it.__next__())# print(it.__next__())# print(it.__next__())# print(it.__next__())# print(it.__next__())#

迭代器模擬for循環

lst = ["趙一寧", "石可心", "朱奎峰", "姚明","潘長江"] for el in lst: # 底層用的是迭代器print(el)

?不輸出錯誤

lst = ["趙一寧", "石可心", "朱奎峰", "姚明","潘長江"] it = lst.__iter__() # 獲取迭代器 while 1:try: # 嘗試執行el = it.__next__() # 獲取下一個元素print(el)except StopIteration: # 處理錯誤,不顯示break

判斷是否為迭代器

偏方

# print("__iter__" in dir(it)) # print("__next__" in dir(it)) # 可以通過dir來判斷數據是否是可迭代的, 以及數據是否是迭代器

官方方案

# from collections import Iterable # 可迭代對象 # from collections import Iterator # 迭代器 # # print(isinstance(lst, Iterable)) # print(isinstance(lst, Iterator)) # # print(isinstance(it, Iterable)) # print(isinstance(it, Iterator))

?

轉載于:https://www.cnblogs.com/P-Z-W/p/10745217.html

總結

以上是生活随笔為你收集整理的python note 11 函数名的使用、闭包、迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。