python函式式程式設計

2021-09-08 15:51:43 字數 3537 閱讀 4902

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)

40>>>

在什麼地方有用:當需要用乙個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)

55>>>

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

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

Python函式式程式設計

python函式式程式設計的核心思想是 把函式當資料.所以,函式可以用作函式引數,函式返回值,元組或字典成員等 閉包閉包是實現 復用的一種途徑,與類不同的是它基於函式實現.函式與它的環境變數一起就構成了閉包,閉包只有乙個返回值,那就是閉包中的函式 def line conf a,b def line...

python函式式程式設計

一 lambda 主要用來自定義行內函式 二 map 首先定義乙個函式,再用map 命令將函式逐一應用到map列表中的每個元素,最後返回乙個陣列 例如 map lambda x,y x y,a,b 表明將a,b兩個列表的元素對應相乘,把結果返回到新列表。三 reduce 用於遞迴運算 例如 redu...