5.2Python函數(二)
阿新 • • 發佈:2019-02-04
技術分享 block 需求 閉包 mbo b+ 兩個 日期 名稱
目錄
- 目錄
- 前言
- (一)偏函數
- ==1.說明==
- ==2.原代碼==
- ==3.顯示效果==
- (二)高階函數
- ==1.說明==
- ==2.源代碼==
- ==3.運行效果==
- (三)返回值函數
- ==1.說明==
- ==2.源代碼==
- ==3.運行效果==
- (四)匿名函數
- ==1.說明==
- ==2.源代碼==
- ==3.運行效果==
- (五)閉包函數
- ==1.說明==
- ==2.源代碼==
- ==3.運行效果==
目錄
前言
這一篇式相繼上一篇5.1Python函數(一)的進階文章。
一個重要的思想是:我們把”函數名“當成一個變量來處理。
(一)偏函數
==1.說明==
偏函數:在不修改原函數的原函數前提下,修改函數的默認值,新建的函數叫偏函數。
==2.原代碼==
# 定義一個有默認值的函數 def test1(a, b, c, d=1): print(a+b+c+d) # 現在有一個需求,想把默認值改為c=2,d=3 # 我們需要在重新構造一個全新的函數? # 不需要,下面的定義類似類的繼承,也就是偏函數的定義 def test2(a, b, c=2, d=3): test1(a, b, c, d) # 調用偏函數 test2(1, 2)
==3.顯示效果==
(二)高階函數
==1.說明==
函數名也是一個變量,也可以通過賦值,傳遞給其他變量。
當函數的形參接收的是一個函數名的時候,則稱該函數是高階函數
==2.源代碼==
# 動態的計算兩個數 def caculate(num1, num2, caculatefun): result = caculatefun(num1, num2) print(result) # 求差函數 def mysum(a, b): result = a + b print("求和函數") return result # 求和和函數 def mysub(a, b): result = a - b print("求差函數") return result # 調用高級函數 caculate(4, 2, mysum) caculate(4, 2, mysub)
==3.運行效果==
(三)返回值函數
==1.說明==
當函數的返回值是:一個函數名稱時,我們稱返回值函數
==2.源代碼==
# 定義一個返回值函數
def get_fun(symbol):
# 子函數求和
def my_sum(a, b):
return a+b
# 子函數求差
def my_sub(a, b):
return a-b
# 根據判斷返回不同的函數名
if symbol == "+":
return my_sum
elif symbol == "-":
return my_sub
# 調用返回函數
func = get_fun("+")
result = func(1, 2)
print(result)
==3.運行效果==
(四)匿名函數
==1.說明==
沒有名字的函數,我們稱匿名函數,也稱lambda函數。
語法:lambda var1, var2,……:表達式
註意:只能寫一個表達式,而且只能用一次。
==2.源代碼==
# 定義一個匿名函數
func = lambda x, y: x + y
result = func(1, 2)
print("結果是:", result)
==3.運行效果==
(五)閉包函數
==1.說明==
首先清楚兩個概念:
外部函數:在外出定義的函數。
內部函數:嵌套在一個函數裏面的和函數。
閉包函數的定義:(滿足三個條件)
- 必須有函數嵌套
- 內部函數引用到外部的變量
- 返回值是內部函數名
註:內部函數需要修改外部變量,需要用nolocal 聲明
==2.源代碼==
# 定義一個閉包函數
def test(a):
b = 2
def test2():
nonlocal b
b = 5
print("a:", a)
print("b:", b)
return test2
# 調用閉包函數
fun = test(1)
fun()
==3.運行效果==
作者:Mark
日期:2019/02/04 周一
5.2Python函數(二)