抽象函數(shù)
一 ==概念==:
函數(shù)是一個可以重復(fù)使用的代碼塊,而且他有名稱,授受參數(shù)的傳入,返回輸出
抽象,迭代輸出列表的例子
例如:
l = [1,2,3,4,5,6]
for i in l:
print i
工具:sublime text2
界面更改字體:
{"font_face":Ubuntu Mono
"font_size":14
}
二,==內(nèi)置函數(shù)==:
- max()
- min()
- len()
- type()
- id()
- dir()
三,==創(chuàng)建==
def test(a):
"""
test doc.
"""
a.sort()
return a
print test(l)
- 保留關(guān)鍵字 def 空格 函數(shù) 名稱
- 函數(shù)名后面是需要傳入的參數(shù),放在小括號,聲明部分以冒號結(jié)束
- 第二行建議三引號括起來寫描述文檔
- 調(diào)用函數(shù)文檔:
test.__doc__
- 或者
help(test)
- 調(diào)用函數(shù)文檔:
- 函數(shù)一定要有return返回值
四,==函數(shù)的參數(shù)==
這個參數(shù)用來像函數(shù)內(nèi)部傳遞一些參數(shù),處理后return返回
傳遞參數(shù)
-
位置參數(shù)(必填),關(guān)鍵字參數(shù)(可選)
默認參數(shù)是位置參數(shù),從左至右傳入
關(guān)鍵字參數(shù),直接通過變量名匹配
-
參數(shù)的值是局部的,他只在函數(shù)內(nèi)部發(fā)生作用
全局作用可以用 globle a
-
*是元組 #收集器
**是字典
def test(a,b,*arg1,**arg2): #位置參數(shù)在前,元組需放在字典參數(shù)前
'''
測試元組,字典,位置參數(shù)
'''
return a,b,arg1,arg2
print test(3,4,4,5,6,j=4,k=3,m=5)
結(jié)果:(3, 4, (4, 5, 6), {'k': 3, 'j': 4, 'm': 5})
pass 的問題
print "a>b" if a>b else pass
會出錯,因為pass不能作為輸出,可以加上引號"pass"
沒有return會返回none
==抽象加法例==
def add(*num):
'''
加法
'''
n = 0
for i in num:
n += i
instance(num,int)判斷類型
assert斷言關(guān)鍵字 ,成立就什么都不做,如果條件不成立就會報錯 assert add(a,b) == 4 ,"標明原因"
注意事項
- 學(xué)習(xí)使用好函數(shù)
- 現(xiàn)實現(xiàn)代碼的功能,在把他抽象成函數(shù)
- 抽象成函數(shù):先寫偽代碼,命名規(guī)范,默認參數(shù)
- 考慮函數(shù)健壯性
- 自省fun.__code__
- 作用域
- 可變參數(shù)的問題
lambda匿名函數(shù)
lambda,行內(nèi)函數(shù)
-
格式:
lambda x: x+1
lambda 參數(shù): 表達式
簡單任務(wù)用lambda,復(fù)雜任務(wù)用def
-
如何調(diào)用
l = lambda x: x+1 l(2)
lambda主體內(nèi)想要用if語句,需要用三元表達式
三元表達式x if x>y else y
l = lambda x,y:x if x>y else y
例子for 循環(huán),利用列表推導(dǎo)式
l = [222,23,467,34,657] f = lambda x:[item for item in x if item > 30] print f(l)
-
filter函數(shù)
.isalnum() 所有字符都是數(shù)字或字母
f = filter(lambda x: x.isalnum(),l)
filter 把不滿足的條件全部過濾
-
遞歸
調(diào)用函數(shù)本身
factorial ==階乘==
?