函式式程式設計

2021-09-10 19:26:46 字數 3607 閱讀 5414

函式: 最大程度復用**

# 1. 以lambda開頭

# 2. 緊跟一定的引數(如果有的話)

# 3. 引數後用冒號和表示式主題隔開

# 4. 只是乙個表示式,所以,沒有return

stm=lambda x,y,z:x+y*10+z*100

print(stm(1,2,3))=>321

函式名稱是變數,則可以被當做引數傳入另乙個函式

高階函式

def func(n, f):

return f(n) * 3

def fund(n):

return n*10

print(func(9,fund))=>270

原意就是對映,即把集合或者列表的元素,每乙個元素都按照一定規則進行操作,生成乙個新的列表或者集合

map函式是系統提供的具有對映功能的函式,返回值是乙個迭代物件

def square(x):

return x**2

rst=map(square,[1,2,3,4,5])

print([i for i in ret])=>[1, 4, 9, 16, 25]

原意是歸併,縮減

把乙個可迭代物件最後歸併成乙個結果

對於作為引數的函式要求: 必須由兩個引數,必須由返回結果

reduce([1,2,3,4,5]) == f( f(f(f(1,2),3), 4),5)

reduce 需要匯入functools包

from functools import reduce

# 定義乙個操作函式

# 加入操作函式只是相加

def myadd(x,y):

return x + y

# 對於列表[1,2,3,4,5,6]執行myadd的reduce操作

rst = reduce( myadd, [1,2,3,4,5,6] )

print(rst)=>21

過濾函式: 對一組資料進行過濾,符合條件的資料會生成乙個新的列表並返回

跟map相比較:

相同:都對列表的每乙個元素逐一進行操作

不同:map會生成乙個跟原來資料想對應的新佇列

filter不一定,只要符合條件的才會進入新的資料集合

filter函式怎麼寫:

利用給定函式進行判斷

返回值一定是個布林值

呼叫格式: filter(f, data), f是過濾函式, data是資料

def iseven(a):

return a % 2 == 0

l = [3,4,56,3,2,3,4556,67,4,4,3,23455,43]

rst = filter(iseven, l)

print([i for i in rst])=>[4, 56, 2, 4556, 4, 4]

把乙個序列按照給定演算法進行排序

key: 在排序錢對每乙個元素進行key函式運算,可以理解成按照key函式定義的邏輯進行排序

python2 和 python3 相差巨大

#排序

a=[234,22312,123,45,43,2,3,66723,34]

al=sorted(a,reverse=false)#al=sorted(a)

print(al)=>[2, 3, 34, 43, 45, 123, 234, 22312, 66723]

bl=sorted(a,reverse=true)

print(bl)=>[66723, 22312, 234, 123, 45, 43, 34, 3, 2]

a = [-43,23,45,6,-23,2,-4345]

al=sorted(a,key=abs)

print(al)=>[2, 6, 23, -23, -43, 45, -4345]

#key=str.lower

#字串小的,排序

def myf4( *args):

def myf5():

rst = 0

for n in args:

rst += n

return rst

return myf5

f5 = myf4(1,2,3,4,5,6,7,8,9,0)

f5()=>45

當乙個函式在內部定義函式,並且內部的函式應用外部函式的引數或者區域性變數,當內部函式被當做返回值的時候,相關引數和變數儲存在返回的函式中,這種結果,叫閉包

def count():

# 定義列表,列表裡存放的是定義的函式

fs =

for i in range(1,4):

# 定義了乙個函式f

# f是乙個閉包結構

def f():

return i*i

return fs

f1,f2,f3 = count()

print(f1())=>9

print(f2())=>9

print(f3())=>9

def count2():

def f(j):

def g():

return j*j

return g

fs =

for i in range(1,4):

return fs

f1,f2,f3 = count2()

print(f1())=>1

print(f2())=>4

print(f3())=>9

在不改動函式**的基礎上無限制擴充套件函式功能的一種機制,本質上講,裝飾器是乙個返回函式的高階函式

裝飾器的使用: 使用@語法, 即在每次要擴充套件到函式定義前使用@+函式名

import time

def printtime(f):

print("time: ", time.ctime())

return f(*args, **kwargs)

@printtime

def hello():

print("hello world")

hello()=>

time: thu feb 14 17:25:10 2019

hello world

print(int("123456",base=8))=>42798

print(int(12.88))=>12

def int16(x,base=16):

return int(x,base)

print(int16("12345"))=>74565

引數固定的函式,相當於乙個由特定引數的函式體

functools.partial的作用是,把乙個函式某些函式固定,返回乙個新函式

import functools

int16=functools.partial(int,base=16)

print(int16("12345"))=>74565

函式式程式語言python 函式式程式設計

函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...

函式式程式設計

最近在看一些關於js方面的東東,除了些ajax的基本應用,還了解了些函式式程式設計 fp 的東東。雖然以前也玩過幾天lisp的,不過因為當時完全對fp的東西沒有概念,壓根就不知道原來這是list那一族最大的特性之一 另外我知道的還有個是gc,orz.光注意那些詭異的 表 去了。總結一下,傳統上認為f...

函式式程式設計

維基百科 函式式程式設計 英語 functional programming 或者函式程式設計,又稱泛函程式設計,是一種程式設計范型,它將計算機運算視為數學上的函式計算,並且避免使用程式狀態以及易變物件。函式程式語言最重要的基礎是 演算 lambda calculus 而且 演算的函式可以接受函式當...