流暢的Python讀書筆記 --- 第五章 一等函數

近期在讀「流暢的Python」這本書,想把本身的讀書筆記分享給你們,但願能幫到也對這本書感興趣可是沒時間看的各位。(文章中大部分的話和圖片摘錄總結自「流暢的Python」一書,以及python官方網站)python

章節概述:Python中函數是一等對象,本章從函數爲何是一等對象的角度來介紹Python函數。
章節結構:編程

  • 什麼是一等對象
  • 爲何函數是一等對象
  • 函數式編程風格,高階函數
  • 使用高階函數時,一次性的小型函數,匿名函數
  • 可調用對象

具體內容:數據結構

  • 什麼是一等對象

一等對象是知足下述條件的程序實體:在運行時建立,能賦值給變量或者數據結構中的元素,能做爲參數傳給函數,能做爲函數的返回結果。app

  • 函數是對象

咱們能夠在控制檯中def function_example(n): 建立一個函數,因此函數知足運行時建立。
咱們查看type(function_name),返回<class, 'function'>,說明function_example是function類的實例
咱們也能夠將function_example這個對象賦值給一個變量,好比variable_example = function_example函數式編程

  • 函數式編程風格,高階函數

接收函數爲參數,或者把函數做爲結果返回的函數就是高階函數(higher-order function)。好比map,filter,reduce,apply,sorted
例:sorted(list_example, key=len)
幾個高階函數的說明:
sun和reduce的通用思想是把某個操做連續應用到序列的元素上,累計以前的結果,把序列值歸約成一個值。
all和any是內置的歸約函數
map和filter返回生成器,所以他們的替代品是生成器表達式函數

  • 使用高階函數時,一次性的小型函數,匿名函數

匿名函數,lambda。匿名函數的定義體只能使用純表達式,lambda定義體中不能賦值,也不能使用while,try等等
例:sorted(list_example,key=lambda word:word[::-1])網站

  • 可調用對象

如何判斷一個對象是否可調用,能夠用內置的callable()函數判斷。
可調用對象:
用戶定義的函數:def/lambda
內置函數:len等
內置方法:dict.get等
方法:在類的定義體中定義的函數
類:調用類會先運行__new__建立一個實例,而後運行__init__初始化實例,而後把實例返回給調用方
類的實例:若是定義了__call__
生成器函數:使用yield關鍵字的函數或方法
如何把類的實例變成可調用的對象?實現call方法spa

  • 函數內省:函數的屬性

Function.png

  • Python的參數處理機制

位置參數:位置參數是按位置順序傳參的。
關鍵字參數:函數定義時,若是有參數,則全部的形參名都是一個關鍵字,若是想經過關鍵字的方式傳參,可使用關鍵字=值得方式傳參。
默認參數:在函數定義時就給參數傳入了一個默認的參數值,若是函數調用時沒有給這個參數傳值,就使用默認值, 若是顯式的傳參了,就使用新傳入的值代替默認值。
僅限關鍵字參數(Keyword-only argument):僅限關鍵字參數就是隻能傳入關鍵字參數,不能經過其餘方式傳參。僅限關鍵字參數不可缺省(除非有默認值),且只能強制性經過關鍵字傳參。
可變參數:可變參數是一個形參能夠接受多個實參,可變參數的傳入數是不決定的,一般由函數調用方決定。
可變關鍵字參數:可變關鍵字參數 用 雙星號+參數名錶示, 可變關鍵字參數接收零個或多個關鍵字參數,並以字典的形式傳入函數體,關鍵字爲此字典的key,關鍵字綁定的值爲value。若是可變關鍵字沒有接收到任何參數, 則傳入函數體一個空字典{}。~~~~
獲取參數信息:函數__default__屬性,這個元組中保存着定位參數和關鍵字參數的默認值,僅限關鍵字參數的默認值在__kwdefaults__裏。對象

  • 支持函數式編程的包

operator模塊:位多個算術運算符提供了對應的函數
functools模塊:提供了一系列高階函數,好比reduceblog

相關文章
相關標籤/搜索