python的一些高階函式的使用

2021-10-01 19:33:57 字數 1770 閱讀 4251

產生原因:受到記憶體限制,我們希望生成的大列表取出時不是從記憶體中整個取出,而是取出乙個,按照某種演算法依次推理出先乙個元素的位置。

生成方式:

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...