python迭代器及高階函式

2022-04-10 20:21:57 字數 3446 閱讀 7190

collections.abc          # iterator的模組

iterator # 迭代器

iterable # 可迭代物件

​functools # 模組引入 reduce

reduce # 高階函式----> 做累計算

​dir() # 獲取當前類的所有成員

__closure__ # 獲取閉包函式的使用變數

func().cell_contents # 獲取func()的閉包函式

__iter__ # 判斷是否是可迭代資料

# 概念(可迭代物件不一定是迭代器乙個迭代器就一定是乙個可迭代物件)

# 迭代取值的工具,重複上一次的結果而繼續的過程

​# 特徵

# 不依賴索引,通過next指標迭代所有資料,一次取乙個值,節省空間

setvar = 

res = iter(setvar)

print(res)

iter_var = iter()

print("__iter__" in dir(iter_var) and "__next__" in dir(iter_var))

"""

next在呼叫迭代器中的資料時,是單向不可逆,一條路走到黑的過程

"""iter_var = iter()

print(next(iter_var))

print(next(iter_var)) # 呼叫2次,剩下3元素

# 沒有元素則報錯 -----> stopiteration 報錯 停止迭代

for i in iter_var:

print(i) # i 只能迴圈3次

iter_var = iter()  # 重新賦值

from collections import iterator,iterable

​setvar =

iter_var = iter(setvar)

​print(isinstance(iter_var,iterator))

print(isinstance(setvar,iterable))

# 能夠把函式當成引數傳遞的就是高階函式

"""

功能: 把iterable裡面所有資料 一一的放進到func這個函式中進行操作 ,把結果扔進迭代器

引數: func 內建或自定義函式

iterable 具有可迭代性的資料 ([迭代器],[容器型別的資料],[range物件])

返回值:

返回最後的迭代器

"""# 示例一

def func(n):

dic =

dic_new = {}

for k,v in dic.items():

dic_new[v] = k

return dic_new[n]

print(list(map(func,["a","b","c"])))

"""

功能: 過濾資料

return true 當前這個資料保留

return false 當前這個資料捨棄

引數: func : 自定義函式

iterable : 可迭代型資料(容器型別資料,range物件,迭代器)

返回值:

迭代器"""res = filter(lambda i : true if i % 2 == 0 else false , [1,2,3,4,5,6,7,8,9,10] )

print(res)

res = filter(lambda x: type(x) == int ,[11,22,33,"zhou","04內建模組"])

print(res)

"""

功能:累計算資料

先把iterable中的前兩個值拿出來,扔到func當中做運算,

把計算的結果和iterable中的第三個元素在扔到func當中做運算,

再把結果算出來,和第四個元素做運算,以此類推

直到所有結果運算完畢.返回該結果

引數: func : 自定義函式

iterable : 可迭代型資料(容器型別資料,range物件,迭代器)

返回值:

計算之後的結果

"""# 示例一 (lst = [5,4,8,8] # => 整型5488)

from functools import reduce

​print(reduce(lambda x,y: x*10 + y,[5,4,8,8]))

​# 示例二

# "789" => 789 禁止使用int強轉 -> 數字 789

def func1(x,y):

return x*10 + y

def func2(n):

dic =

return dic[n]

# [7,8,9]

print(reduce(func1,map(func2,"789") ))

"""

功能:排序

引數: iterable:可迭代型資料(容器型別資料,range物件,迭代器)

key :指定 自定義函式或 內建函式

reverse : 代表公升序或者降序 , 預設是公升序(從小到大排序) reverse=false

返回值:

排序後的list結果

"""# 示例一

lst = [1,2,3,4,5,-90,-4,-1,100]

print(sorted(lst))

​# 示例二 (從大到小)

res = sorted(lst,reverse=true)

print(res)

​# 示例三 (絕對值排序 abs)

lst = [-10,-1,3,5]

print(sorted(lst,key=abs))

​# 示例四 (餘數從大到小排序)

def func(n):

return n % 10

print(sorted(lst,key=func,reverse=true))

​# 示例五(集合排序)

setvar=

print(sorted(setvar))

​# 示例六(字典排序)

container =

print(sorted(container)) # ['a', 'b', 'c'] 排 key

python 函式高階 迭代器

迭代 可以理解成迴圈,迭代一次,迴圈一次 根據所學知識我們知道,直接作用於for迴圈的資料型別有 一是集合資料型別,如str list,tuple,dict,set等 一類是generator,如,生成器和帶yield的generator function 這些可以直接作用於for迴圈的物件統稱為可...

python迭代器高階

我們之前簡單的了解了一下迭代器,本篇,我們來看看迭代器具體的使用方法吧!lst 1 2,3 4 import dis 引入標準庫dis,用它觀察for迴圈的細節。dis.dis for i in lst pass 1 0 setup loop 12 to 14 2 load name 0 lst 4...

2 3 15 Python 函式高階 迭代器

可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable。可以使用isinsta...