老齊python-基礎8(函數)

一、函數基本概念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: ()
相關文章
相關標籤/搜索