1. 匿名函式
a) 沒有名字,lambda[agr1[,arg2…]]:expression
b) 表示式:sum=lambda agr1,agr2:agr1+agr2;
sum(10,20)
c) 函式可以做引數傳遞,
三個大資料用的函式:
foo=[2,3,2,5,6,5,52]
filter(lambdax:x%3=0,foo)//過濾留下能被三整除的數,
map(lambdax:x*2,foo)//遍歷列表
mylist=map(lambdax:x,mylist)
foriinmylist:
print(i)
reduce(lambdax,y:x+y,foo)//求foo裡面的和
reduce需要匯入模組fromfunctoolsimportreduce2. sorted列表排序,小到大排序正序倒序
sorted(lisr,reverse=true)倒序排序,
3. 隨機數:
a) import random
i. random.choice(range(1-34))隨機取1-33之間的1個隨機數,可能重複
ii. random.choices(range(1-34),k=6,weight=)隨機取1-33之間的1個隨機數,可能重複
iii. random.sample(range(1,34),6)
4. sort和sorted排序的區別
a) sort沒有返回值,原來的列表順序沒了,
b) sorted 返回乙個新列表
5. 迭代器和生成器:
a) 迭代器是訪問集合內的元素的一種方式,迭代器物件從集合的第乙個元素開始訪問,直到所有的元素都被訪問一遍結束.
b) 迭代器協議:物件需要提供next()方法,它要麼返回下乙個物件,要麼引起乙個
•迭代器是訪問集合內元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素都被訪問一遍後結束。
•可迭代物件:實現了迭代器協議的物件
•for,max,min,sum等使用迭代器協議訪問物件
•構建迭代器的時候,以一種延遲計算(lazy evaluation)方式返回元素,這正是它的優點。比如列表含有中一千萬個整數,
需要佔超過400m的記憶體,而迭代器只需要幾十個位元組的空間。因為它並沒有把所有元素裝載到記憶體中,
而是等到呼叫 next 方法時候才返回該元素(按需呼叫 call by need 的方式,本質上 for 迴圈就是不斷地呼叫迭代器的next方法)
•for迴圈實現 了迭代器
–for i in [1,2,3,4]:
print i
•檔案物件提供迭代器協議
–with open('e:\\s133\\s131.txt') as f:
for line in f: #for迴圈使用迭代器協議訪問檔案
print(line)
生成器:
•python使用生成器對延遲操作提供了支援
•所謂延遲操作,是指在需要的時候才產生結果,而不是立即產生結果。這也是生成器的主要好處。
•python有兩種不同的方式提供生成器
–1.生成器函式:常規函式定義,但是,使用yield語句而不是return語句返回結返回乙個結果,在每個結果中間,掛起函式的狀態
,以便下次重它離開的地方繼續執行果。yield語句一次
–2.生成器表示式:類似於列表推導,但是,生成器返回按需產生結果的乙個物件,而不是一次構建乙個結果列表
•使用生成器返回自然數的平方(注意返回的是多個值):
def gensquares(n):
for i in range(n):
yield i ** 2
for item in gensquares(5):
print item
使用普通函式:
def gensquares(n):
res=
fori inrange(n):
returnres
for item in gensquares(5):
print item
•語法上和函式類似:
–區別:生成器使用yield語句返回乙個值,而常規函式使用return語句返回乙個值
•自動實現迭代器協議:
–對於生成器,python會自動實現迭代器協議,(如for迴圈,sum函式)。由於生成器自動實現了迭代器協議,所以,我們可以呼叫它的next()方法,並且,在沒有值可以返回的時候,生成器自動產生stopiteration異常
•狀態掛起:
–生成器使用yield語句返回乙個值。yield語句掛起該生成器函式的狀態,保留足夠的資訊,以便之後從它離開的地方繼續執行
•生成器的好處是延遲計算,一次返回乙個結果。也就是說,它不會一次生成所有的結果,這對於大資料量處理,將會非常有用
–sum([ifor i inxrange(10000000000)])
–sum(ifor i in xrange(10000000000))
•對於前乙個表示式還沒有看到最終結果電腦就已經卡死,對於後乙個表示式,幾乎沒有什麼記憶體占用。
•**簡潔,易於閱讀
–求一段文字中,每個單詞出現的位置
使用生成器的情況:
def index_words(text):
if text:
yield 0;
for index,letter inenumerate(text,1):
if letter==' ':
yield index,letter
result=index_words('iam rong')
for a in result:
print(a)
python之路 函式迭代,生成器
恢復內容開始 dir 被測物件 如果它含有 iter 那這個物件叫做可迭代物件,遵循可迭代協議。可迭代物件 iterable 可以轉換 迭代器 如何實現 都像內部定義乙個 iter 方法 迭代器 iterator 遵循迭代器協議 1,只含有 iter 方法的資料是課迭代的物件 l 1,2,3,4 p...
Python 函式(迭代器 生成器)
只要能被for迴圈的資料型別,就一定擁有 iter 方法,for迴圈其實就是在使用迭代器 只要是迭代器就一定可以迭代 可迭代物件.iter 迭代器 迭代器中的 next 方法可以乙個乙個的獲取值 迭代器物件可以使用常規for語句進行遍歷 list 1,2,3,4 it iter list 建立迭代器...
python生成器函式 Python 生成器函式
一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...