一、函數基本概念python
二、理解函數編程
python中一個函數,就是一種映射關係數組
三、定義函數app
#!/usr/bin/env python #coding:utf-8 def add_function(a,b): c = a+b return c if __name__ == "__main__": result = add_function(2,3) print(result)
def:是函數的開始,在聲明要創建一個函數的時候,必定要使用def(define),意思就是告知python解析器,這裏要聲明一個函數。def所在的哪一行,包括後面的add_function(a,b)被稱爲函數頭。函數
add_function:是函數名稱。取名是有講究的,在python中取名字的講究就是要有必定的意義,可以從名字中看出這個函數是用來幹什麼的。spa
(a,b)是參數列表,要寫在括號裏面。這是一個變量(參數)列表,其中的變量(參數)指向函數的輸入。code
: 很是重要,若是少了,就會報錯orm
c = a + b ,這一行開始就是函數體,函數體是縮進了4個空格的代碼塊,完成你須要完成的工做,對象
return c ,須要縮進4個空格,return是函數的關鍵字,意思是要返回一個值。return語句執行時,python跳出當前的函數並返回到調用這個函數的地方,在下面,有調用這個函數的地方 :result = add_function(2,3)可是,函數中的return語句也不是必需要寫的,若是不寫,python將認爲以return None做爲結束。也就是說,若是函數中沒有return ,事實上在調用的時候,python也會返回一個結果Noneblog
if __name__ == "__main__":
result = add_function(2,3)
總結:
def 函數名(參數1,參數2,...參數n):
函數體(語句塊)
四、標準
函數名的命名規則要符合python中的命名要求,通常用小寫字母和單下劃線、數字等組合。
def是定義函數的關鍵詞,這個簡寫來自英文單詞define
函數名後面是圓括號,括號裏面能夠有參數列表,也能夠沒有參數。
千萬不要忘記括號後面的冒號
函數體(語句塊),相對於def縮進,按照python習慣,縮進4個空格
多態:
>>> add("qiw","sir") Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'add' is not defined >>> def add(x,y): ... return x+y ... >>> add("qiw","sir") 'qiwsir' >>> add("qiwsir",4) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in add TypeError: Can't convert 'int' object to str implicitly
對象有類型,變量無類型
>>> add <function add at 0x7fabf4c30b70> >>> type(add) <class 'function'> >>> r = add >>> r <function add at 0x7fabf4c30b70> >>> r(3,4) 7 >>> add(3,4) 7 >>> type(r) <class 'function'>
五、命名總結
變量:變量名所有小寫,由下劃線鏈接各個單詞,注意,變量的命名不要與Python保留的關鍵字衝突
文件名:全小寫,可始用下劃線
函數名:小寫,能夠始用下劃線風格的單詞,以增長可讀性。
函數的參數:命名方式同變量(本質上就是變量)
六、函數調用
下降編程難度
代碼重用
>>> add(10,3) x=10 y=3 13 >>> add(x=10,y=3) #指定函數變量值 x=10 y=3 13 >>> add(y=10,x=3) x=3 y=10 13 >>> def times(x,y=2): #建立函數內變量默認值 ... print("x={}".format(x)) ... print("y=",y) ... return x * y ... >>> times(2) x=2 y= 2 4 >>> times(3,4) #改變函數內變量默認值 x=3 y= 4 12 >>> def foo(): #函數嵌套,調用一個不存在的函數 ... print('Hello,Teacher Cang!') ... bar() ... >>> foo() Hello,Teacher Cang! Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in foo NameError: name 'bar' is not defined >>> def bar(): pass #定義函數體內函數,pass表示什麼也不作 ... >>> foo() Hello,Teacher Cang!
七、函數返回值
斐波那契數列:
#!/usr/bin/env python3 # encoding: utf-8 """ @version: ?? @author: tajzhang @license: Apache Licence @file: fbnq.py @time: 2018/2/28 11:49 """ def fibs(n): result = [0,1] for i in range(n-2): result.append(result[-2] + result[-1]) return result if __name__ == "__main__": lst = fibs(10) print(lst)
返回多個值
>>> def my_fun(): ... return 1,2,3 ... >>> a = my_fun() >>> a (1, 2, 3) >>> type(a) <class 'tuple'> >>> x,y,z = my_fun() >>> print(x,y,z) 1 2 3
>>> def foo(): #定義空函數 ... pass ... >>> print(foo()) #返回空值 None >>> def my_fun(): #return中斷函數體過程 ... print("I am coding.") ... return ... print("I finished.") ... >>> my_fun() I am coding.
定義函數中的幫助屬性
#!/usr/bin/env python3 # encoding: utf-8 """ @version: 1.0 @author: tajzhang @license: Apache Licence @file: fbnq.py @time: 2018/2/28 11:49 """ def fibs(n): """ This is a Fibonacci sequence. #定義doc方法輸出內容 """ result = [0,1] for i in range(n-2): result.append(result[-2] + result[-1]) return result if __name__ == "__main__": lst = fibs(10) print(lst) print(fibs.__doc__) #打印doc
>>> my_fun() I am coding. >>> def cang(): ... """This is a function of canglaoshi""" ... pass ... >>> cang.__doc__ 'This is a function of canglaoshi' >>> cang.breast = 90 #增長函數屬性 >>> cang.breast 90 >>> cang.__name__ 'cang' >>> cang.__module__ '__main__'
傳遞多個參數
arg、args
>>> def func(x,*arg): #將其它參數組成元祖 ... print(x) ... result = x ... print(arg) ... for i in arg: ... result += i ... return result ... >>> func(1,2,3,4,5,6,7,8,9) 1 (2, 3, 4, 5, 6, 7, 8, 9) #arg或args 將多個參數揉進一個元祖 45
>>> def foo(x,*args): ... print("x:",x) ... print("tuple:",args) ... >>> foo(7) #定義函數給args傳入空值 x: 7 tuple: ()