中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python高階函數

發布時間:2020-07-29 19:08:35 來源:網絡 閱讀:404 作者:射雕英雄k 欄目:編程語言
  • 一、什么是高階函數:
    變量可以指向函數,函數的參數能接收變量,那么一個函數就可以接收另一個函數作為參數,這種函數就稱之為高階函數。比如:
def add(x,y,f):
    return f(x) + f(y)

op = add(1,1,abs)  #這里把python內置函數abs作為參數傳遞給add
print op
結果:2
python里的高階函數有 filter、map、reduce、sorted、匿名函數lambda等
  • 二、python 里的高階函數:

匿名函數:

python使用lambda來創建匿名函數

  • lambda 只是一個表達式,函數體比 def 簡單很多。
  • lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
  • lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間里的參數。
  • 雖然lambda函數看起來只能寫一行,卻不等同于C或C++的內聯函數,后者的目的是調用小函數時不占用棧內存從而增加運行效率。
    語法:lambda 函數的語法只包含一個語句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
#lambda 參數列表:return [表達式] 變量
#  由于lambda返回的是函數對象(構建的是一個函數對象),所以需要定義一個變量去接收

實例1

sum = lambda arg1, arg2: arg1 + arg2;

# 調用sum函數
print ("相加后的值為 : ", sum( 10, 20 )) # 相加后的值為 :  30
print ("相加后的值為 : ", sum( 20, 20 )) # 相加后的值為 :  40

實例2

#對字典排序
infors = [{"name":"wang","age":18},{"name":"li","age":20},{"name":"qian","age":30}]
infors.sort(key=lambda x:x['age']) #根據值對字典排序
print(infors)

實例3

def test(a,b,func):
    result = func(a,b)
    return result

num = test(11,22,lambda x,y:x+y)
print(num)

filter函數

filter() 函數用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然后返回 True 或 False,最后將返回 True 的元素放到新列表中。

  • 語法:filter(function, iterable)
  • 參數:function---- 判斷函數,iterable -- 可迭代對象。
  • 返回值:返回列表。

實例

def is_odd(n):
    return n % 2 == 1
alist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(alist)

map函數

接收一個函數 f 和一個或多個序列list,并通過把函數 f 依次作用在 序列list 的每個元素上,得到一個新的 list 并返回。

  • 語法:map(function, iterable, ...)
  • 參數:function -- 函數,iterable -- 一個或多個序列
  • 返回值:Python 2.x 返回列表。Python 3.x 返回迭代器。

實例

>>>def square(x) :            # 計算平方數
...     return x ** 2
... 
>>> map(square, [1,2,3,4,5])   # 計算列表各個元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函數
[1, 4, 9, 16, 25]

# 提供了兩個列表,對相同位置的列表數據進行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

reduce函數

reduce()函數接收的參數和 map()類似,但是行為不同。reduce() 函數會對參數序列中元素進行累積。reduce()傳入的函數 f 必須接收兩個參數,用傳給 reduce 中的函數 f(有兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 f 函數運算,最后得到一個結果。

  • 語法:reduce(function, iterable[, initializer])
  • 參數:function -- 函數,有兩個參數。iterable -- 可迭代對象。initializer -- 可選,初始參數

實例

>>>def add(x, y) :            # 兩數相加
...     return x + y
... 
>>> reduce(add, [1,2,3,4,5])   # 計算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函數
15

>>> def f(a,b):
...     return a+b
... 
>>> print reduce(f,[1,2,3,4],10)  #1+2+3+4+10.這里的第三個參數是做為初始值的。
20

#注意:reduce在3.0里已經已經由一個內置方法移到標準庫里了,3.0里調用reduce必須import functools,3.0里使用方法如下
>>>import functools
>>>res = functools.reduce(lambda x, y: x+y, [1,2,3,4,5])
>>>print res

sorted函數

sort 與 sorted 區別:
sort 是應用在 list 上的方法,sorted 可以對所有可迭代的對象進行排序操作。
list 的 sort 方法返回的是對已經存在的列表進行操作,無返回值,而內建函數 sorted 方法返回的是一個新的 list,而不是在原來的基礎上進行的操作。

  • 語法:sorted(iterable[, cmp[, key[, reverse]]])
  • 參數:
    iterable -- 可迭代對象。
    cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大于則返回1,小于則返回-1,等于則返回0。
    key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。
    reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
  • 返回值:返回重新排序的列表。

實例

>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a)       # 保留原列表
>>> a 
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]

>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))   # 利用cmp函數
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1])               # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2])            # 按年齡排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

>>> sorted(students, key=lambda s: s[2], reverse=True)       # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>>
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

祁阳县| 东山县| 项城市| 沂南县| 永丰县| 罗城| 信丰县| 蒲江县| 时尚| 常山县| 长汀县| 壤塘县| 肇州县| 天长市| 呈贡县| 新乐市| 襄垣县| 石柱| 敖汉旗| 沙田区| 包头市| 滦平县| 乌拉特后旗| 余江县| 广饶县| 大名县| 酒泉市| 岳池县| 吴川市| 乌拉特中旗| 卓尼县| 黔江区| 康平县| 修水县| 龙州县| 娄烦县| 濮阳县| 萨嘎县| 漠河县| 桂阳县| 荣昌县|