函式式程式設計

2021-10-02 02:50:10 字數 3976 閱讀 6901

函式作為引數

函式作為返回值

作用域用一系列函式解決問題

# 函式式程式設計 -- 語法

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語句

在函式內部修改全域性變數

在函式內部定義全域性變數(全域性宣告)

在函式內直接為全域性變數賦值,視為建立新的區域性變數

不能先宣告區域性的變數,再用global宣告為全域性變數

nonlocal 語句 (閉包修飾器)

# 全域性變數:在整個檔案中可以訪問

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 而且 演算的函式可以接受函式當...