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

來源:互聯網
上載者:User

標籤:pytho   .com   close   列表   pen   closed   glob   引用   hang   

動態參數:一,*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,argsset=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,argsset=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,kwargsset=func(1,2,3,4,5,a=3,b=7)print(set)
位置參數,*args,預設參數,**kwargs

從上面的函數可以得出:

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

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

def func1(*args):    return argsfunc1(*[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 = 3func()print(a)count = 1def search():    global count    count = 2search()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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.