1. 程式人生 > >python 的基礎 學習 12天,函數

python 的基礎 學習 12天,函數

時空 foo nal 角度 int 添加 內存 clas 函數

1, *args 動態 參數,萬能參數

*args就是接受實參對應的剩余的位置參數,並將其放在元組中。在定義函數時,*args代表的是聚合。

def func(*args):
    print(args)
func(1,34,jdai,5,56,66)#(1, 34, ‘jdai‘, 5, 56, 66)
def func(a,b,c,d,*args,e=):
    print(a)
    print(b)
    print(c)
    print(d)
    print(args)
    print(e)
func(1,2,3,4,5,10,5,6,7,8,e=
)#1
2
3
4
(5, 10, 5, 6, 7, 8)

2,**kwargs,動態傳參,只接受關鍵字參數,將所有的關鍵字參數(無意義的)放到一個字典中。

最終順序(形參角度)

def func(a,b,c,**kwargs):
    print(kwargs)
func(1,3,4,r=6,t=7,y=0)

位置傳參,*args, 默認參數 **kwargs

def func(a,b,c,d,*args,e=,**kwargs):
    print(a)
    print(b)
    print(c)
    print(d)
    print(args)#(5, 10, 5, 6, 7, 8)
    
print(e) print(kwargs)#{‘f‘: ‘女‘, ‘h‘: 48, ‘g‘: 5} func(1,2,3,4,5,10,5,6,7,8,f=,g=5,h=48)

3, *號的魔法運用,在函數調用執行時,*代表打散。*加可叠代對象(list,tuple,set,str,dict的鍵),代表打散,將元素一一添加到args。

def func(*args):
    print(args)
li = [1,2,3,4,6]
l2 = [3,6,6,7,77,66]
tu = (eqwj,ee,ui)
func(*li,*l2,*tu)

(1, 2, 3, 4, 6, 3, 6, 6, 7, 77, 66, ‘eqwj‘, ‘ee‘, ‘ui‘)將元素一一添加到args中。

def func(**kwargs):
    print(kwargs)
dic = {name:alex,age:44}
dic1 = {home:taiwan,hobby:football}
func(**dic,**dic1)

**字典,代表打散,將所有鍵值對放到一個kwargs字典裏。

def func(*args,**kwargs):
    print(args)
    print(kwargs)
dic1 = {honnn:shui,nugu:dao}
dic2 = {name1:兩年半,age:33}
func(*[1,3,4,5],*ahdhsdkj,**dic1,**dic2)

(1, 3, 4, 5, ‘a‘, ‘h‘, ‘d‘, ‘h‘, ‘s‘, ‘d‘, ‘k‘, ‘j‘)
{‘nugu‘: ‘dao‘, ‘name1‘: ‘兩年半‘, ‘honnn‘: ‘shui‘, ‘age‘: 33}

4,名稱空間,也叫命名空間。放置變量與對應的值得關系(內存地址的關系)。當執行函數的時候,它會在內存中開辟一個臨時名稱空間,存放函數體內的所有變量與值得關系,隨著函數的執行完畢,

臨時空間自動關閉。

全局名稱空間,名稱空間,命名空間,全面命名空間。

局部命名空間,臨時名稱空間,臨時命名空間,局部名稱空間。

內置名稱空間,所有的內置函數等存儲的空間。

加載順序:

內置名稱空間>>>全局名稱空間>>>(函數執行時)局部名稱空間

取值順序:

(函數執行時)局部名稱空間>>>全局名稱空間>>>內置名稱空間

name = 老男孩
def func1():
    name =taibai
    print(name)
func1()#taibai
name = 老男孩
def func1():
    # name =‘taibai‘
    print(name)
func1()#老男孩

全局作用域:全局名稱空間,內置名稱空間。

局部作用域:局部名稱空間。

5,函數的嵌套

print(111)#1
def func1():
    print(333)#2
    func2()
    print(777)#4
def func2():
    print(444)#3
def func3():
    print(555)
    func2()
func1()
print(222)#5
print(111)#1
def func1():
    print(333)#2
    func2()
    print(444)#6
def func2():
    print(222)#3
    func3()
    print(555)#5
def func3():
    print(666)#4
func1()
print(777)#7

6,globals和locals

a = 2
b = 3
def func1():
    c = 4
    d = 5
    print(globals())#將全局變量放在字典中
    return locals()#將局部變量放在字典中{‘c‘: 4, ‘d‘: 5}
print(func1())

{‘a‘: 2, ‘__cached__‘: None, ‘__file__‘: ‘D:/python3/day11/xuxi329.py‘, ‘__name__‘: ‘__main__‘, ‘__doc__‘: None, ‘__builtins__‘: <module ‘builtins‘ (built-in)>, ‘b‘: 3, ‘__loader__‘: <_frozen_importlib_external.SourceFileLoader object at 0x000001EE02A95780>, ‘func1‘: <function func1 at 0x000001EE026CA048>, ‘__spec__‘: None, ‘__package__‘: None}

a = 4
def func1():
    b = 6
    def func2():
        nonlocal b#nonlocal不能修改全局變量
        b = 666
        print(b)
    func2()
    print(b)
func1()

global:

1,在局部空間內,聲明一個全局變量。

2,在局部空間內,改變一個全局變量。

globals,全局名稱空間:所有變量。

locals,局部名稱空間:所有變量。

nonlocal:

  1,不能修改全局變量。

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

python 的基礎 學習 12天,函數