Python-函數基礎(2)

可變長參數

形參

*形參app

接收多餘的位置實參,以元組形式保存函數

**形參code

接收多餘的關鍵字實參,以字典形式保存對象

實參

*實參生命週期

將元組類型打散,傳給*形參作用域

**實參it

將字典類型打散,傳給**形參io

函數對象

  • 能夠做爲引用function

    x = 'hello nick'
    y = x
    
    f = func
    print(f)
  • 做爲容器元素

    l = [x]
    
    function_list = [func]
    function_list[0]()
  • 做爲函數參數

    len(x)
    
    def foo(m):
        m()
    
    foo(func)
  • 做爲函數函數返回值

    def foo(x):
        return x
    
    res = foo(func)
    print(res)
    res()

函數嵌套

打印九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print(f"{i}*{j}={i*j}",end="")
    print()

名稱空間與做用域

名稱空間

內置名稱空間

放置內置方法

生命週期:在解釋器啓動時生效,在解釋器關閉時失效

局部名稱空間

函數中定義的變量和函數

生命週期:在函數調用期間生效,執行結束失效

全局名稱空間

除了內置和局部都放在全局名稱空間

生命週期:在文件執行時生效,文件結束後失效

執行順序

內置--》全局--》局部

搜索順序

從當前位置 局部--》全局--》內置

做用域

全局做用域

全局有效,全局存活

局部做用域

臨時存儲,只包含局部名稱空間

global

修改全局做用域中的變量。

x = 1


def f1():
    x = 2

    def f2():
        global x  # 修改全局
        x = 3
    f2()


f1()
print(x)

nonlocal

x = 1


def f1():
    x = 2

    def f2():
        nonlocal x
        x = 3

    f2()
    print(x)


f1()

注意點:

在局部想要修改全局的可變類型,不須要任何聲明,能夠直接修改。

在局部若是想要修改全局的不可變類型,須要藉助global聲明,聲明爲全局的變量,便可直接修改。

lis = []


def f1():
    lis.append(1)


print(f"調用函數前: {lis}")
f1()
print(f"調用函數後: {lis}")
相關文章
相關標籤/搜索