產生原因:受到記憶體限制,我們希望生成的大列表取出時不是從記憶體中整個取出,而是取出乙個,按照某種演算法依次推理出先乙個元素的位置。
生成方式:
l = [x * x for x in range(10)] 可迭代物件
g= (x * x for x in range(10))生成器 生成,也可利用yield生成
兩者的區別 可被next(g)呼叫,每次是在上一次迭代的基礎上進行計算
如list、tuple、dict、set、str等稱為迭代物件
generator,包括生成器和帶yield的generator function稱為迭代器
迭代器是迭代物件,可以被for迴圈呼叫。
迭代器可以看做乙個資料流,無法知道資料的長度,只能使用的時候再去呼叫下乙個元素。
lambda x: x * x
==def f(s):
return s*s
map()函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。
舉例說明,比如我們有乙個函式f(x)=x2,要把這個函式作用在乙個list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()實現
def f(s):
return s*s
g=[ x for x in range(10)]
print([j for j in map(f,g)])#生成的是可迭代物件
結果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce把結果繼續和序列的下乙個元素做累積計算
from functools import reduce
def f(x,y):
return x*y
g=[ x for x in range(1,10)]
print(reduce(f,g))
結果:362880
filter()函式用於過濾序列
def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
結果: [1, 5, 9, 15]
*args 傳遞形參列表,**kwargs 按照關鍵字傳值
位置引數(指定引數值)、*args、**kwargs三者的順序必須是:位置引數、*args、**kwargs,否則會出錯
高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return su
f = lazy_sum(1, 3, 5, 7, 9)
f()=25
相當於now = log(now)
math.round() 「四捨五入」
math.ceil() 「向上取整」
math.floor() 「向下取整」
@staticmethod 靜態方法只是名義上歸屬類管理,但是不能使用類變數和例項變數,是類的工具包
放在函式前(該函式不傳入self或者cls),所以不能訪問類屬性和例項屬
mongodb 隨機取資料
collection_seed.aggregate( [ ' at position 24: …"干擾**":if_type}}̲,} ] )
Python的一些高階函式
1.zip 函式 作用 zip函式結果是乙個可迭代物件,前面加上list,tuple,dict才可以列印出來,把兩個可迭代物件進行一對一取出,這兩個取出的元素放入乙個元祖裡,最後的結果是乙個可迭代物件 引數 括號裡必須參入兩個可迭代物件 ziper list zip 1,2,3 4,5,6 prin...
python的高階語法 Python的一些高階語法
一 python生成器 python生成器另乙個重要特性,就是能夠利用next函式與呼叫的 進行互動。yield變成了乙個表示式,而值可以通過名為send的新方法來傳遞 def psychologist print please tell me your problems while true an...
MySQL的一些內建函式(高階函式)
bin x 返回 x 的二進位制編碼 15 的 2 進製編碼 select bin 15 1111 binary s 將字串 s 轉換為二進位制字串 select binary csdn csdn case expression when condition1 then result1 when c...