函式: 最大程度復用**
# 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 而且 演算的函式可以接受函式當...