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():
'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...