廖雪峯Python學習筆記4——高階函數(map,reduce)

高階函數

  • 變量可以指向函數:f=abs
  • 函數名也是變量:
    注意:由於abs函數實際上是定義在import builtins模塊中的,所以如果需要修改abs變量的指向在其他模塊也生效,需要使用:import builtins;builtins.abs=10
  • 傳入函數
    一個函數可以接受另一個函數作爲參數——高階函數
def add(x,y,f):
    return f(x)+f(y)

print(add(5,-6,abs))

變量可以指向函數

  • map函數:map(函數f,iterable)把一個函數f,作用在可迭代對象上
    在這裏插入圖片描述
    (注:map()的返回值已經不再是list,而是iterators,直接使用會報錯<map object at 0x000001A8A5497048>需要將iterator 轉換成list , 比如 list(map())
    (注:若函數中已經定義過一個list,則使用list(map())時會報錯TypeError: 'list' object is not callablecallable()是python的內置函數,用來檢查對象是否可被調用,(可被調用指的是對象能否使用()括號的方法調用)將自定義的列表名字修改,不叫list就可以了)

  • reduce函數:作用在一個序列上,把結果繼續和序列的下一個元素做累積計算reduce(函數fun,序列)
    在這裏插入圖片描述
    (注:使用rudece函數需要先導入:from functool import ruduce )
    (注:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4))

  • lambda函數:(一個匿名函數)
    lambda 參數:表達式
    在這裏插入圖片描述
    (注:參數:可選,如果提供,通常是逗號分隔的變量表達式形式,即位置參數)
    (注:表達式:不能包含分支或循環(但允許條件表達式),也不能包含return(或yield)函數。如果爲元組,則應用圓括號將其包含起來)

  • list.split(),split()函數通過指定分隔符對字符串進行切片,通常通常輸入的字符串需要分割處理
    在這裏插入圖片描述

  • .upper()將字母轉換爲大寫,

  • .lower()將字母轉換爲小寫

  • raw_print()==print(),python3中使用print()代替raw_print(),在Python3中使用raw_python會報錯name 'raw_input' is not defined

  • eval(expression[, globals[, locals]])eval() 函數用來執行一個字符串表達式,並返回表達式的值
    在這裏插入圖片描述
    練習:

  • 利用map()函數,把輸入的英文名,變成首字母大寫其餘小寫
    思路:
    1、input()獲取輸入的str
    2、str.split()切片,將輸入的str用','分開成list
    3、map(fun,list)函數,將函數作用到list的每個元素上
    4、list(map()) 將得到一個list
    5、list[0]即取第一個元素,list[1:]即取第二個及之後的元素
    在這裏插入圖片描述

  • 接收一個list並利用reduce()求積
    思路:
    1、定義pord()函數接收list
    2、定義fun3(x,y)函數,實現乘積
    3、使用reduce()函數,將fun3函數作用在L上
    (2、或者使用匿名函數:lambda 參數:表達式)
    在這裏插入圖片描述

  • 把字符串’123.456’轉換成浮點數123.456
    思路:
    1、使用list.index(‘.’)函數,定位到“.”的位置n
    2、使用map(int,list)將str強制轉換成int型
    3、list(map()),組裝成list
    4、以"."爲分界線,將list按照整數部分,小數部分拆分成兩個list
    5、reduce(fun,list)將fun函數作用到list上,將list,變成整數/小數部分
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章