python学习笔记(七)函数
1. 定義函數(shù)
定義函數(shù)的格式為:
def 函數(shù)名(參數(shù) 1,參數(shù) 2,...,參數(shù) n):函數(shù)體(語句塊)是不是樣式很簡單呢?
幾點(diǎn)說明:
- 函數(shù)名的命名規(guī)則要符合 Python 中的命名要求。一般用小寫字母和單下劃線、數(shù)字等組合
- def 是定義函數(shù)的關(guān)鍵詞,這個簡寫來自英文單詞 define
- 函數(shù)名后面是圓括號,括號里面,可以有參數(shù)列表,也可以沒有參數(shù)
- 千萬不要忘記了括號后面的冒號
- 函數(shù)體(語句塊),相對于 def 縮進(jìn),按照 Python 習(xí)慣,縮進(jìn)四個空格
使用return 返回。
3.參數(shù)收集
既然有很多不確定性,那么函數(shù)的參數(shù)的個數(shù),也當(dāng)然有不確定性,函數(shù)怎么解決這個問題呢?Python 用這樣的方式解決參數(shù)個數(shù)的不確定性:
def func(x,*arg):print x #輸出參數(shù) x 的值result = xprint arg #輸出通過 *arg 方式得到的值for i in arg:result +=ireturn resultprint func(1,2,3,4,5,6,7,8,9) #賦給函數(shù)的參數(shù)個數(shù)不僅僅是 2個運(yùn)行此代碼后,得到如下結(jié)果:
1 #這是函數(shù)體內(nèi)的第一個 print,參數(shù)x得到的值是 1 (2, 3, 4, 5, 6, 7, 8, 9) #這是函數(shù)內(nèi)的第二個 print,參數(shù) arg 得到的是一個元組 45 #最后的計(jì)算結(jié)果從上面例子可以看出,如果輸入的參數(shù)個數(shù)不確定,其它參數(shù)全部通過 *arg,以元組的形式由 arg 收集起來。對照上面的例子不難發(fā)現(xiàn):
- 值 1 傳給了參數(shù) x
- 值 2,3,4,5,6.7.8.9 被塞入一個 tuple 里面,傳給了 arg
為了能夠更明顯地看出 args(名稱可以不一樣,但是 符號必須要有),可以用下面的一個簡單函數(shù)來演示:
>>> def foo(*args): ... print args #打印通過這個參數(shù)得到的對象 ...下面演示分別傳入不同的值,通過參數(shù) *args 得到的結(jié)果:
>>> foo(1,2,3) (1, 2, 3)>>> foo("qiwsir","qiwsir.github.io","python") ('qiwsir', 'qiwsir.github.io', 'python')>>> foo("qiwsir",307,["qiwsir",2],{"name":"qiwsir","lang":"python"}) ('qiwsir', 307, ['qiwsir', 2], {'lang': 'python', 'name': 'qiwsir'})如果用 **kargs 的形式收集值,會得到 dict 類型的數(shù)據(jù),但是,需要在傳值的時候說明“鍵”和“值”,因?yàn)樵谧值渲惺且枣I值對形式出現(xiàn)的。
看官到這里可能想了,不是不確定性嗎?我也不知道參數(shù)到底會可能用什么樣的方式傳值呀,這好辦,把上面的都綜合起來。
>>> def foo(x,y,z,*args,**kargs): ... print x ... print y ... print z ... print args ... print kargs ... >>> foo('qiwsir',2,"python") qiwsir 2 python () {} >>> foo(1,2,3,4,5) 1 2 3 (4, 5) {} >>> foo(1,2,3,4,5,name="qiwsir") 1 2 3 (4, 5) {'name': 'qiwsir'}很 good 了,這樣就能夠足以應(yīng)付各種各樣的參數(shù)要求了。
def foo(**args)
這種方式跟上面的區(qū)別在于,必須接收類似 arg=val 形式的。
4.lambdalambda 函數(shù),是一個只用一行就能解決問題的函數(shù),聽著是多么誘人呀。看下面的例子:
>>> def add(x): #定義一個函數(shù),將輸入的變量增加 3,然后返回增加之后的值 ... x += 3 ... return x ... >>> numbers = range(10) >>> numbers [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #有這樣一個 list,想讓每個數(shù)字增加 3,然后輸出到一個新的 list 中>>> new_numbers = [] >>> for i in numbers: ... new_numbers.append(add(i)) #調(diào)用 add() 函數(shù),并 append 到 list 中 ... >>> new_numbers [3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 在這個例子中,add() 只是一個中間操作。當(dāng)然,上面的例子完全可以用別的方式實(shí)現(xiàn)。比如: >>> new_numbers = [ i+3 for i in numbers ] >>> new_numbers [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]首先說明,這種列表解析的方式是非常非常好的。
但是,我們偏偏要用 lambda 這個函數(shù)替代 add(x),如果看官和我一樣這么偏執(zhí),就可以:
>>> lam = lambda x:x+3 >>> n2 = [] >>> for i in numbers: ... n2.append(lam(i)) ... >>> n2 [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]這里的 lam 就相當(dāng)于 add(x),請看官對應(yīng)一下,這一行 lambda x:x+3 就完成 add(x) 的三行(還是兩行?),特別是最后返回值。還可以寫這樣的例子:
>>> g = lambda x,y:x+y #x+y,并返回結(jié)果 >>> g(3,4) 7 >>> (lambda x:x**2)(4) #返回 4 的平方 16通過上面例子,總結(jié)一下 lambda 函數(shù)的使用方法:
- 在 lambda 后面直接跟變量
- 變量后面是冒號
- 冒號后面是表達(dá)式,表達(dá)式計(jì)算結(jié)果就是本函數(shù)的返回值
總結(jié)
以上是生活随笔為你收集整理的python学习笔记(七)函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习笔记(六)循环、迭代
- 下一篇: python学习笔记(八)类(class