• <xmp id="wgksg"><samp id="wgksg"></samp>
  • <blockquote id="wgksg"></blockquote>
  • 400-650-7353

    精品課程

    您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎知識】Python高階函數

    【Python基礎知識】Python高階函數

    • 發布: python培訓
    • 來源:python干貨資料
    • 2020-11-25 10:59:12
    • 閱讀()
    • 分享
    • 手機端入口

    高階函數是指接收函數為參數,或者將函數作為結果返回的函數。

    (1)sorted()函數

    sorted()函數用于對可迭代對象進行排序。除此之外,sorted()函數是高階函數,可以傳遞給sorted()函數一個自定義的函數作為參數,這個參數的名字是key,必須以關鍵字參數的形式傳遞。sorted()函數要比較的每個值都會傳入key指定名稱的函數內,并根據該函數的返回值進行比較,以實現按自定義的排序方式進行排序。

    例如,下面的列表中包含了一些代表動物的字符串,將它們進行排列:

    1. >>> animals = ['panda''lion''tiger''fox''elephant'
    2. >>> sorted(animals)   # 未指定key參數 
    3. ['elephant''fox''lion''panda''tiger'
    4. >>> sorted(animals, key=len)   # 指定key參數的值為len 
    5. ['fox''lion''panda''tiger''elephant'

    在未指定key參數的情況下,列表按照字典順序排序。在指定key參數的值為len的情況下,列表按照字符串的長度排序(len()函數),animals列表中的每個字符串都“輸入”len()函數,再將字符串的長度作為返回值“輸出”,如'fox'的長度為3,數值最小,故排在第一位,'elephant'長度為8,數值最大,故排在最后一位。注意,此處len()函數沒有括號,是將函數名作為參數,如果加上括號,那么是調用函數。

    再舉另外一個示例,字符串的lower()方法是將字母變成小寫字母,同樣也可以使用str.lower()將lower()方法作為函數使用,下面兩種方式是等價的:

    1. >>> 'P'.lower() 
    2. 'p' 
    3. >>> str.lower('P'
    4. 'p' 

    知道這個知識后,就能將str.lower()函數用在字符串排序中了。下面的示例中,將含有字母的列表排序:

    1. >>> letters = ['a''Y''z''B'
    2. >>> sorted(letters)   # 未指定排序方式,按默認方式排序,大寫字母總在小寫字母前面 
    3. ['B''Y''a''z'
    4. >>> letters = ['a''Y''z''B']  
    5. >>> sorted(letters, key=str.lower)   # 將所有字母全部變為小寫字母再排序 
    6. ['a''B''Y''z'

    除了使用內建函數之外,當然也可以使用自定義的函數來指定排序規則。仍然使用前面的animals列表,這次將'panda'排在第一位,剩下的動物依舊按照字符串的長度排序。

    1. >>> animals = ['panda''lion''tiger''fox''elephant'
    2. >>> def panda_first(animal): 
    3. ...     if animal == 'panda':   # 如果是'panda',返回0,使其排在第一位 
    4. ...         return 0 
    5. ...     else:   # 如果是其他動物,那么返回它的長度 
    6. ...         return len(animal) 
    7. ...  
    8. >>> sorted(animals, key=panda_first)   
    9. ['panda''fox''lion''tiger''elephant'

    然而,通常為了給key參數提供一個值而編寫一個普通函數是不太值得的,往往使用匿名函數即可:

    1. >>> animals = ['panda''lion''tiger''fox''elephant'
    2. >>> sorted(animals, key=lambda animal: 0 if animal == 'panda' else len(animal)) 
    3. ['panda''fox''lion''tiger''elephant'

    這個匿名函數看起來有些復雜,它的參數是animal,表達式是一個三目表達式:如果animal的值是'panda',返回0,否則返回animal的長度。使用匿名函數可以在一行內方便地將列表排列成指定順序。

    使用sorted()函數和匿名函數還可以用來給字典排序。例如,將下面的水果字典(將字典的值想象為水果數量)按照水果數量從大到小的順序排序:

    1. >>> fruits = {'apple'10'banana'42'orange'5'mango'18
    2. >>> sorted(fruits.items(), key=lambda item: item[1])   #比較字典的第2項 
    3. [('orange'5), ('apple'10), ('mango'18), ('banana'42)] 

    由于sorted()函數只能對可迭代對象進行排序,而字典的items()方法返回的值可以迭代,因此,可以使用items()方法進行迭代。

    (2)max()函數和min()函數

    max()函數和min()函數也是高階函數,與sorted()函數的相似之處在于,它們也要經過比較才能返回值(可以理解為sorted()排序后的最大值和最小值)。max()函數和min()函數也有key參數,作用機制與sorted()函數一致。

    例如,下面的字典中存儲著各個同學的分數,使用max()找到分數最高的同學:

    1. >>> grade = {'小明'72'梅梅'81'麗麗'58
    2. >>> max(grade.items(), key=lambda item: item[1]) 
    3. ('梅梅'81

    假設老師給小明加了10分,那么需要改動匿名函數:

    1. >>> grade = {'小明'72'梅梅'81'麗麗'58
    2. >>> max(grade.items(), key=lambda item: item[1] + 10 if item[0] == '小明' else item[1]) 
    3. ('小明'72

    min()函數與max()函數是相似的,只是min()函數返回的是最小值:

    1. >>> numbers = [15400280082142100099
    2. >>> min(numbers) 
    3. 15 

    下面將用自定義的函數作為key參數的值,這個參數返回一個數字各個位相加的和(由于這個函數稍微有些復雜,因此,建議使用def關鍵字定義函數):

    1. >>> def sum_digit(num): 
    2. ...     sum = 0  
    3. ...     while num: 
    4. ...         sum += num % 10 
    5. ...         num = num // 10 
    6. ...     return sum 
    7. >>> # 下面簡單測試一下這個函數的正確性 
    8. >>> sum_digit(46)  # 4和6相加為10 
    9. 10 
    10. >>> sum_digit(99)  # 9和9相加為18 
    11. 18 
    12. >>> sum_digit(1000# 1和0相加為1 
    13. 1 
    14. >>> # 下面使用這個函數作為key參數的值 
    15. >>> numbers = [15400280082142100099
    16. >>> min(numbers, key=sum_digit) 
    17. 1000 

    課程好禮申請領取
    您的姓名
    您的電話
    意向課程
     

    中公優就業

    官方QQ

    掃描上方二維碼或點擊一鍵加群,免費領取價值599元網課,加群暗號:599。 一鍵加群

    >>本文地址:
    注:本站稿件未經許可不得轉載,轉載請保留出處及源文件地址。

    推薦閱讀

    優就業:ujiuye

    關注中公優就業官方微信

    • 關注微信回復關鍵詞“大禮包”,領80G學習資料
    QQ交流群
    領取免費網課
    (加群備注“網站”)
    IT培訓交流群 加入群聊 +
    軟件測試 加入群聊 +
    全鏈路UI/UE設計 加入群聊 +
    Python+人工智能 加入群聊 +
    互聯網營銷 加入群聊 +
    Java開發 加入群聊 +
    PHP開發 加入群聊 +
    VR/AR游戲開發 加入群聊 +
    大前端 加入群聊 +
    大數據 加入群聊 +
    Linux云計算 加入群聊 +
    優就業官方微信
    掃碼回復關鍵詞“大禮包”
    領取80G學習資料

    測一測
    你適合學哪門IT技術?

    1 您的年齡

    2 您的學歷

    3 您更想做哪個方向的工作?

    獲取測試結果
     
    課程資料、活動優惠 領取通道
     
     
    A级毛片毛片免费观看久,A毛看片免费观看视频,毛片曰本女人牲交视频视频