Python函式使用方法(高階用法)

2021-09-24 23:17:13 字數 2675 閱讀 4050

python 的函式是「一等公民」,因此函式本身也是乙個物件,函式既可用於賦值,也可用作其他函式的引數,還可作為其他函式的返回值。

python 的函式也是一種值:所有函式都是 function 物件,這意味著可以把函式本身賦值給變數,就像把整數、浮點數、列表、元組賦值給變數一樣。

當把函式賦值給變數之後,接下來程式也可通過該變數來呼叫函式。例如如下**:

# 定義乙個計算乘方的函式  def pow(base, exponent) :      result = 1      for i in range(1, exponent + 1) :          result *= base      return result  # 將pow函式賦值給my_fun,則my_fun可當成pow使用  my_fun = pow  print(my_fun(3 , 4)) # 輸出81  # 定義乙個計算面積的函式  def area(width, height) :      return width * height  # 將area函式賦值給my_fun,則my_fun可當成area使用  my_fun = area  print(my_fun(3, 4)) # 輸出12
從上面**可以看出,程式依次將 pow()、area() 函式賦值給 my_fun 變數,接下來即可通過 my_fun 變數分別呼叫 pow()、area() 函式。

其實 python 已經內建了計算乘方的方法,因此此處的 pow() 函式並沒有太大的實際意義,只是作為示範使用。

通過對 my_fun 變數賦值不同的函式,可以讓 my_fun 在不同的時間指向不同的函式,從而讓程式更加靈活。由此可見,使用函式變數的好處是讓程式更加靈活。

除此之外,程式還可使用函式作為另乙個函式的形參和(或)返回值。

有時候需要定義乙個函式,該函式的大部分計算邏輯都能確定,但某些處理邏輯暫時無法確定,這意昧著某些程式**需要動態改變,如果希望呼叫函式時能動態傳入這些**,那麼就需要在函式中定義函式形參,這樣即可在呼叫該函式時傳入不同的函式作為引數,從而動態改變這段**。

python 支援像使用其他引數一樣使用函式引數,例如如下程式:

上面程式中定義了乙個 map() 函式,該函式的第二個引數是乙個函式型別的引數,這意味著每次呼叫函式時可以動態傳入乙個函式,隨著實際傳入函式的改變,就可以動態改變 map() 函式中的部分計算**。

pthon 3 本身也提供了乙個 map() 函式,python 3 內建的 map() 函式的功能和此處定義的 map() 函式功能類似,但更加強大。

接下來的三行粗體字**呼叫了 map() 函式三次,三次呼叫依次傳入了 square、cube、factorial 函式作為引數,這樣每次呼叫 map() 函式時實際的執行**是有區別的。

編譯、執行上面程式,可以看到如下輸出結果:

原資料:  [3, 4, 9, 5, 8] 計算陣列元素的平方

[9, 16, 81, 25, 64] 計算陣列元素的立方

[27, 64, 729, 125, 512] 計算陣列元素的階乘

[6, 24, 362880, 120, 40320]

從上面介紹不難看出,通過使用函式作為引數可以在呼叫函式時動態傳入函式,實際上就可以動態改變被呼叫函式的部分**。

# 獲取map的型別

print(type(map))

執行上面**,將會看到如下輸出結果:

前面己經提到,python 還支援使用函式作為其他函式的返回值。例如如下程式:

def get_math_func(type) :      # 定義乙個計算平方的區域性函式      def square(n) :  # ①          return n * n      # 定義乙個計算立方的區域性函式      def cube(n) :  # ②          return n * n * n      # 定義乙個計算階乘的區域性函式      def factorial(n) :   # ③          result = 1          for index in range(2 , n + 1):              result *= index          return result      # 返回區域性函式      if type == "square" :          return square      if type == "cube" :          return cube      else:          return factorial  # 呼叫get_math_func(),程式返回乙個巢狀函式  math_func = get_math_func("cube") # 得到cube函式  print(math_func(5)) # 輸出125  math_func = get_math_func("square") # 得到square函式  print(math_func(5)) # 輸出25  math_func = get_math_func("other") # 得到factorial函式  print(math_func(5)) # 輸出120
程式中,定義了乙個 get_math_func() 函式,該函式將返回另乙個函式。接下來在 get_math_func() 函式體內的 ①、②、③ 號粗體字**分別定義了三個區域性函式,最後 get_math_func() 函式會根據所傳入的引數,使用這三個區域性函式之一作為返回值。

在定義了會返回函式的 get_math_func() 函式之後,接下來程式呼叫 get_math_func() 函式時即可返回所需的函式,如上面程式中**所示。

4個python常用高階函式的使用方法

1 map python內建了map 函式,map 函式接受兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每乙個元素上,並把結果作為新的iterator返回。舉例說明,比如我們有乙個函式f x x 2,要把這個函式作用在乙個list 1,2,3,4,5,6,7,8,...

VLOOKUP函式的使用方法(高階篇)

在學習了vlookup的入門和初級篇後,本文將帶將大家學習vlookup的高階篇 vlookup的模糊查詢。一 字元的模糊查詢 在a列我們知道如何查詢型號為 aaa 的產品所對應的b列 即 vlookup c1,a b,2,0 如果我們需要查詢包含 aaa 的產品名稱怎麼表示呢?如下圖表中所示。公式...

Python內建函式vars 使用方法

vars 為python內建函式,用於返回物件object的屬性和屬性值的字典物件,或者說,返回物件的 dict 屬性,前提是物件具有 dict 屬性,常見如模組 類 例項。語法格式 vars object vars 函式具有乙個可選引數object 返回物件的 dict 屬性 作用同locals ...