python函式式程式設計模式 python函式式程式設計

2021-10-18 14:54:16 字數 3192 閱讀 7806

1 callable內建函式判斷乙個名字是否為乙個可呼叫函式

>>> import math

>>> x = 1

>>> y = math.sqrt

>>> callable(x)

false

>>> callable(y)

true

2 記錄函式(文件字串)

>>> def square(x):

'calculates the square of number x'

return x * x

>>> square.func_doc

'calculates the square of number x'

3 形式引數,實際引數,我能改變引數嗎--字串,數字,元組三者跟序列是有區別的

引數儲存在區域性作用域

4 關鍵字引數和預設值

>>> def say_hello(greeting = 'hello',name = 'jmz',biaodian = '!!!'):

print '%s,%s%s' % (greeting,name,biaodian)

#這樣去呼叫都可以

>>> say_hello()

hello,jmz!!!

>>> say_hello(name = 'yyer',biaodian = '~~~')

hello,yyer~~~

>>> say(name = 'yyer',greeting = 'hi,hi')

>>> say_hello(name = 'yyer',greeting = 'hi,hi')

hi,hi,yyer!!!

5 收集引數

1)將引數收集為元組

例子1:

>>> def print_params(*params):

print params

>>> print_params('param1')

('param1',)

>>> print_params('param1','param2','param3')

('param1', 'param2', 'param3')

例子2:

>>> def print_params_2(title,*params):

print title

print params

>>> print_params_2('title',1,2,3,4,5)

title

(1, 2, 3, 4, 5)

2)將引數收集為字典:

>>> def print_params_4(x,y,z = 3,*pp,**ppp):

print x,y,z

print pp

print ppp

>>> print_params_4(1,2,4,'pp1','pp2','pp3',ppp1 = 'aaa',ppp2 = 'bbb')

1 2 4

('pp1', 'pp2', 'pp3')

3) 收集引數方式的函式呼叫

>>> def hello(**params):

print params['greeting'],params['name']

>>> params =

>>> hello(**params)

hello jmz

6 作用域

1)到底什麼是變數,你可以把它看作是值的名字,就像字典一樣,鍵引用值,在執行a = (1,2,3)的時候就把名字引用到元組上。事實上,這已經很接近真實情況,變數和所對應的值是個不可見的字典。

內建的vars()函式可以返回這個字典:

idle 2.6.5 ==== no subprocess ====

>>> vars()

>>> def printhello():

print 'hello world'

>>> x = 1

>>> a = (1,2,3)

>>> vars()

>>> vars()['a']

(1, 2, 3)

2)區域性變數與全域性變數

在函式內部可以直接引用全域性變數,但是要慎重,過多的使用全部變數容易出錯。

名字遮蔽問題:

如果函式內部區域性變數與外部的全域性變數名字一樣,這時引用的將是區域性變數,可以用globals()函式來獲取全域性變數的字典,globals()返回全部變數的字典。globals()['var1']即可返回全域性變數var1的值

3)巢狀作用域

在python中,可以在函式內部定義函式:

>>> def outfunction(outvar):

a = 2

def infunction(invar):

return outvar * invar * a

return infunction

>>> infunc = outfunction(5)

>>> infunc(4)

在什麼地方有用:當需要用乙個out函式來建立乙個in函式時。

規則:out函式的返回值是乙個函式,它返回了in函式這個函式本身。重要的是:返回的函式還可以訪問它的定義所在的作用域,即:返回的內層函式帶著它的環境+它自身的區域性變數。

7 函式式程式設計---一些有用的函式

1)使用map函式將序列中的元素全部傳遞給乙個函式:

map(function,序列)

2)使用filter函式可以給予乙個返回布林值的函式對元素進行過濾:

>>> def func(x):

return x.isalnum()

>>> seq = ['foo','x41','!***']

>>> filter(func,seq)

['foo', 'x41']

當然,也可以使用列表推導式:

>>> [x for x in seq if x.isalnum()]

['foo', 'x41']

3)lambda表示式特性建立短小函式:

>>> filter(lambda x:x.isalnum(),seq)

['foo', 'x41']

4)reduce函式

reduce(func,seq)將乙個序列的前兩個元素與給定的函式聯合使用,並且將他們的返回值與第三個元素繼續聯合和使用,知道整個序列處理完畢:

>>> seq = [1,2,4,6,7,12,23]

>>> reduce(lambda x,y:x + y,seq)

py函式式程式設計

函式式程式設計把計算視為函式而非指令,純函式式程式設計不需要變數,沒有 測試簡單,python支援的函式式程式設計不是純函式式程式設計,允許有變數存在,支援高階函式,支援閉包,有限度的支援匿名函式 變數可以指向函式,而函式又可以把變數作為引數,所以高階函式就是把函式作為引數的函式。def add x...

python函式式程式設計模式 Python函式式程式設計

函式式程式設計就是一種抽象程度很高的程式設計正規化,純粹的函式式程式語言編寫的函式沒有變數,因此,任意乙個函式,只要輸入是確定的,輸出就是確定的,這種純函式我們稱之為沒有 而允許使用變數的程式語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函式是有 的。函式式程式設計的...

python函式式程式設計模式 什麼是函式式程式設計思維?

函式式程式設計與命令式程式設計最大的不同其實在於 函式式程式設計關心資料的對映,命令式程式設計關心解決問題的步驟 這裡的對映就是數學上 函式 的概念 一種東西和另一種東西之間的對應關係。這也是為什麼 函式式程式設計 叫做 函式 式程式設計。這是什麼意思呢?假如,現在你來到 google 面試,面試官...