1. 程式人生 > >python之函數的進階(2-1)

python之函數的進階(2-1)

加載 gif pre span 進行 文件 chang ret 16px

動態參數:

一,*args:args是元祖,它包含了所有的位置參數。

1,第一種形參中只含*args。

技術分享圖片
def func(*args):
    print(*args,type(args))
func(1,2,3,4,5)
形參中只含*args

技術分享圖片

2,第二種形參中既有位置參數又有*args。

技術分享圖片
def func(x,y,z,*args):
    print(x)
    print(y)
    print(z)
    print(args)
    return x,y,z,args
set=func(1,2,3,4,5,6)
print(set)
既有位置參數又有*args

技術分享圖片

3,第三種形參中既有位置參數,*args又有默認參數。

技術分享圖片
def func(x,y,*args,sex=):
    print(x)
    print(y)
    print(sex)
    print(args)
    return x,y,sex,args
set=func(1,2,3,4,5,6)
print(set)
同時含有位置參數,默認參數,*args

技術分享圖片

**kwargs它包含了所有的關鍵字參數:

1,第一種形參中只含*kwargs。

技術分享圖片
def func(**kwargs):
    print(kwargs,type(kwargs))
func(a=1,b=2,c=3,)
只含有**args

技術分享圖片

2,第二種形參中既有位置參數又有*kwargs。

技術分享圖片
def func(x,y,**kwargs):
    print(x)
    print(y)
    print(kwargs)
set=func(1,2,a=1,b=2,c=3,)
print(set)
位置參數和**kwargs

技術分享圖片

3,第三種形參中既有位置參數,*args,默認參數又有**kwargs。

技術分享圖片
def func(x,y,*args,sex=,**kwargs):
    print(x)
    print(y)
    print(sex)
    print(args)
    
return x,y,sex,args,kwargs set=func(1,2,3,4,5,a=3,b=7) print(set)
位置參數,*args,默認參數,**kwargs

從上面的函數可以得出:

在形式參數的排序是:位置參數-->*args-->默認參數-->**kwargs

魔法運算:(將列表中的元素釋放出來,不在以列表和字典的形式。也稱:打散)

技術分享圖片
def func1(*args):
    return args
func1(*[1,2,3,4,5])
print(func1(*[1,2,3,4,5]))
魔法運算,列表 技術分享圖片
def func2(**kwargs):
    print(kwargs)
dic={k4:1,k5:2,k6:2}
dic1={k1:1,k2:2,k3:2}
ss=func2(**dic,**dic1)
print(ss)
魔法運算,字典

函數的進階:

命名空間:分為全局命名空間,局部命名空間,內置命名空間。

代碼在運行伊始,創建的存儲“變量名與值的關系”的空間叫做全局命名空間

在函數的運行中開辟的臨時的空間叫做局部命名空間

存放python解釋器為我們提供的名字的空間叫做內置命名空間

加載順序內置命名空間(程序運行前加載)->全局命名空間(程序運行中:從上到下加載)->局部命名空間(程序運行中:調用時才加載)

取值順序

 在局部調用:局部命名空間->全局命名空間->內置命名空間

 在全局調用:全局命名空間->內置命名空間

綜上所述,在找尋變量時,從小範圍,一層一層到大範圍去找尋。

作用域:

作用域就是作用範圍,按照生效範圍可以分為全局作用域和局部作用域。

全局作用域:包含內置名稱空間、全局名稱空間,在整個文件的任意位置都能被引用、全局有效

局部作用域:局部名稱空間,只能在局部範圍生效

global關鍵字,nonlocal關鍵字:

global的作用:

1:申明一個全局變量

2:在局部作用域想要對全局作用域的全局變量進行修改時,需要用到 global(限於字符串,數字)

技術分享圖片
def func():
    global a
    a = 3
func()
print(a)


count = 1
def search():
    global count
    count = 2
search()
print(count)
global:

註意: ps:對可變數據類型(list,dict,set)可以直接引用不用通過global

技術分享圖片
li = [1,2,3]
dic = {a:b}

def change():
    li.append(a)
    dic[q] = g
    print(dic)
    print(li)
change()
print(li)
print(dic)
對於可變數據類型,可以不用golobal

nonlocal的作用:

1,不能修改全局變量。

2,在局部作用域中,對父級作用域(或者更外層作用域非全局作用域)的變量進行引用和修改,並且引用的哪層,從那層及以下此變量全部發生

技術分享圖片
def add_b():
    b = 42
    def do_global():
        b = 10
        print(b)
        def dd_nonlocal():
            nonlocal b
            b = b + 20
            print(b)
        dd_nonlocal()
        print(b)
    do_global()
    print(b)
add_b()
nonlocal

函數的嵌套與作用域:

python之函數的進階(2-1)