Function

函數初識:
s = '12345'
def my_len():
    i = 0
    for k in s:
        i += 1
    print(i)
my_len()
my_len() #重複調用
問題:
    1.只能打印s的長度
    2.經過i = my_len() 返回none,發現函數沒有返回長度,只是單純的打印
解決:增長返回值
s = '12345'
def my_len():
    i = 0
    for k in s:
        i += 1
    return i   #給蘋果
my_len()
length = my_len()   #要蘋果
print(length)
返回值的三種狀況:
    1.沒有返回值
        -不寫return 程序會在最後默認return None
        -只寫return,程序遇到return就不會運行後面的程序了。結束一個 函數的繼續。
        -寫return None和只寫return功能同樣
    2.返回一個值
        -能夠返回任何數據類型
        -只要返回了就能夠接受到
        -若是在一個程序中有多個return,那麼只執行一個
    3.返回多個值
        -有多少個返回值用多少個變量接收,不能多也不能少。return 1,2,3   a,b,c = fun()
        -用一個變量接收多個返回值,會返回一個元組 
元組、list、dict是能夠解包的:
    1.a,b,c = (1,2,3)
    2.a,b,c = [1,2,3]
    3.a,b,c = {1:1,2:2,3:3}
參數:
    1.ret = my_len(s) #傳遞參數;傳參;實際參數;實參
    2.def my_len(s): #形式參數,形參;接收參數
    3.兩個函數能夠互相調用
def f1(i):
    for k in i:
        print(k)
def f2(i):
    f1(i)
    for y in i:
        print(k)
f2([1,2,3,4]) #函數的嵌套調用
參數:
    1.一個參數
    2.兩個參數 def my_len(a,b)
站在參數的角度上:
    1.按照位置傳參
    2.按照關鍵字傳參
    3.混着用能夠:可是必須先按照位置傳參,再按照關鍵字傳參
    4.不能給同一個變量傳多個值
站在形參的角度上:
    1.位置參數:必須傳,並且有幾個參數就傳幾個值
    2.默認參數:能夠不傳,若是不傳就是默認的參數,若是傳了就用傳了
    3.動態參數:args是習慣,能夠無限多的增長參數,可是*args不能收到關鍵字傳遞的參數,*args必須再*kwargs以前
    4.順序:-位置參數,-*args,-默認參數, -**kwargs
動態參數1:能夠接收任意多個參數
def sum( *args): #args只是一個變量名,*不可變
    print(args) #元組用for循環調用
sum(1,2)
sum(1,2,3)
sum(1,2,,3,4) #接收的是按照位置傳參的值,組織成一個 元組
動態參數2:能夠傳入無限多個關鍵詞參數
def func( **kwargs):
    print(kwargs) 
fun(a=1,b=2,c=3)
fun(a=1,b=2)
fun(a=1) #接收的是按照關鍵字傳參的值,組織成一個 字典
兩個動態參數結合,能夠接收全部的值
def func(*args,**kwargs): 
    print(args,kwargs)
func(1,2,3,a=1,b=3) #先傳位置參數,再傳關鍵字參數
def func(a,b,*args,sex='man',**kwargs):
    print( a,b,args,sex='man',kwargs)
func(1,3,4,sex='man',a=1,b=2)
def func(*args):  #站在形參的角度上,給變量加上*,就是組合全部傳來的值
    print(args)
a = [1,2,3,4,5]
func(*a)
#效果等於func(1,2,3,4,5)
#站在實參的角度上,給一個序列加上*,就是將這個序列按照順序打散
def func(**kwargs):
    print(kwargs)
d = {'a':1,'b':2}
func(**d)
效果等於func(a=1,b=2)
函數的註釋:
def func():
    '''
    這個函數實現了什麼功能    
    參數1:
    參數2:
    return:是字符串或者是列表的長度
    '''
    pass
函數的陷阱:
    若是默認參數的值是一個可變數據類型,那麼每一次調用函數的時候,若是不傳值就公用這個數據類型的資源。
def qqxing(i=[]):
    i.append(i)
qqxing()
qqxing([1])
qqxing()
 
def qqxing(k,a={}):
    a[k] = 'v'
    print(a)
qqxing(1)
qqxing(2)
qqxing(3)
相關文章
相關標籤/搜索