函式作為引數
函式作為返回值
作用域用一系列函式解決問題
# 函式式程式設計 -- 語法
deffun01()
:print
("hello world"
)def
fun02
(func)
:print
(""人生苦短,我用python""
) func(
)# 理論支柱1:將函式賦值給變數
a = fun01a()
# 理論支柱2:允許將函式作為引數傳入另乙個函式
fun02(fun01)
list01 =[3
,4,"a",6
,"b",8
,98,]
# 需求1:定義函式,獲取列表中所有字串
deffind01()
:for item in list01:
iftype
(item)
==str
:yield item
# 需求2:定義函式,獲取列表中所有大於10的整數
deffind02()
:for item in list01:
iftype
(item)
==int
and item >10:
yield item
# "封裝" -- 分 -- 提取變化
defcondition01
(item)
:return
type
(item)
==str
defcondition02
(item)
:return
type
(item)
==int
and item >
10# "繼承" -- 隔(抽象->統一) -- 提取共性
# 萬能查詢函式
deffind
(target, func)
:for item in target:
if func(item)
:yield item
# "多型" -- 做 -- 重寫
for item in find(list01, condition01)
:print
(item)
將函式作為引數或返回值的函式
將核心邏輯傳入方法體,使該方法的適用性更廣,體現了物件導向的開閉原則
定義:是一種匿名函式作用:
作為引數傳遞時語法簡潔,優雅,**可讀性強
隨時建立和銷毀,減少程式耦合度
語法變數 = lambda 形參: 方法體
呼叫:變數(實參)
說明:形參沒有可以不填
方法體只能有一條語句,且不支援賦值語句
map(函式,可迭代物件):對映,使用可迭代物件中的每個元素呼叫函式,將返回值作為新可迭代物件元素;返回值為新可迭代物件
filter(函式,可迭代物件):過濾,根據條件篩選可迭代物件中的元素,返回值為新可迭代物件
for item in
filter
(lambda element: element >
5, list01)
:print
(item)
sorted(可迭代物件,key = 函式,reverse = bool值):排序,返回值為排序結果
max(可迭代物件,key = 函式):根據函式獲取可迭代物件的最大值
min(可迭代物件,key = 函式):根據函式獲取可迭代物件的最小值
邏輯連續,當內部函式被呼叫時,不脫離當前的邏輯
三要素:
必須有乙個內嵌函式
內嵌函式必須引用外部函式中變數
外部函式返回值必須是內嵌函式
語法
def 外部函式名(引數):
外部變數
def 內部函式名(引數):
使用外部變數
return 內部函式名
def
fun01()
: a =
100def
fun02()
:print
(a)return fun02
re = fun01(
)re(
)
呼叫:
變數 = 外部函式名(引數)
變數(引數)
定義:在乙個函式內部的函式,同時內部函式又引用了外部函式的變數
本質:閉包是將內部函式和外部函式的執行環境繫結在一起的物件
優點:內部函式可以使用外部變數
缺點:外部變數一直存在於記憶體中,不會在呼叫結束後釋放,占用記憶體
作用:實現python裝飾器。
定義:在不改變原函式的呼叫以及內部**情況下,為其新增新功能的函式
作用:攔截
語法
def 函式裝飾器名稱(func ):
def 內嵌函式(*args, **kwargs):
需要新增的新功能
return func(*args, **kwargs)
return內嵌函式
原函式 = 內嵌函式
@ 函式裝飾器名稱 # 攔截 = 函式裝飾器名稱(原函式)
def 原函式名稱(引數):
函式體原函式(引數)
# 計時裝飾器
import time
defprint_execute_time
(func)
:def
(*args,
**kwargs)
:# 形參--->合
start_time = time.time(
) re = func(
*args,
**kwargs)
# 實參--->拆
stop_time = time.time(
)print(,
(stop_time-start_time)
)return re
本質:使用「@函式裝飾器名稱」修飾原函式,等同於建立與原函式名稱相同的變數,關聯內嵌函式;故呼叫原函式時執行內嵌函式
原函式名稱 = 函式裝飾器名稱(原函式名稱)
裝飾器鏈:乙個函式可以被多個裝飾器修飾,執行順序為從近到遠
變數起作用的範圍
函式內部
函式巢狀
模組(.py檔案)內部
builtins.py檔案
global語句
在函式內部修改全域性變數在函式內部定義全域性變數(全域性宣告)
在函式內直接為全域性變數賦值,視為建立新的區域性變數nonlocal 語句 (閉包修飾器)不能先宣告區域性的變數,再用global宣告為全域性變數
# 全域性變數:在整個檔案中可以訪問
a =10
deffun01()
:# 區域性變數:只能在函式內部訪問
# 外部巢狀變數
b =20def
fun02()
: c =
30# 區域性變數
# 在區域性作用域中,可以讀取全域性變數
# print(a)
# 可以讀取外部巢狀變數
# print(b)
# 宣告全域性變數
global a
a =100print
(a)# 宣告全域性變數(建立全域性變數)不建議
global d
d =40# 宣告外部巢狀變數
nonlocal b
b =200print
(b)return fun02(
)fun01(
)
函式式程式語言python 函式式程式設計
函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...
函式式程式設計
最近在看一些關於js方面的東東,除了些ajax的基本應用,還了解了些函式式程式設計 fp 的東東。雖然以前也玩過幾天lisp的,不過因為當時完全對fp的東西沒有概念,壓根就不知道原來這是list那一族最大的特性之一 另外我知道的還有個是gc,orz.光注意那些詭異的 表 去了。總結一下,傳統上認為f...
函式式程式設計
維基百科 函式式程式設計 英語 functional programming 或者函式程式設計,又稱泛函程式設計,是一種程式設計范型,它將計算機運算視為數學上的函式計算,並且避免使用程式狀態以及易變物件。函式程式語言最重要的基礎是 演算 lambda calculus 而且 演算的函式可以接受函式當...