函式的動態引數 及函式巢狀

Bound_w發表於2018-08-09

1.函式的動態傳參

順序:位置引數=>*arge(接收內容)=>預設引數值(返回的是一個元組)

def chi(*food):
    print(food)
chi("包子","蓋澆飯","大盤雞","麻辣香鍋")
#結果            ('包子  ', '蓋澆飯', '大盤雞', '麻辣香鍋')
def chi(name,*food):
  print(name+"要吃",food)
chi("麻花藤","包子","蓋澆飯","大盤雞","麻辣香鍋")
#位置引數和動態引數的使用
def chi(name,*food,didian="北京"):
  print(name+"要吃",food,didian)
chi("麻花藤","包子","蓋澆飯","大盤雞","麻辣香鍋")
#位置引數,動態引數和預設引數的聯合使用

2.關鍵字的動態傳參

位置引數, *args, 預設值引數, **kwargs (返回的是一個字典)
def chi (**food):
    print(food)
chi(早餐="大麻花",午餐="西紅柿雞蛋麵",晚上="牛肉罩餅")
無敵傳參
def
chi (*food ,**food2): print(food) print(food2) chi("大白梨","菠蘿啤",早餐="小米粥"

函式的主註釋

def func(a, b):
    """

    :param a:第一個資料
    :param b:第二個資料
    :return:返回兩個資料的和
    """
    return a+b
print(func.__doc__)#
2.形參的位置*,**: 聚合
實參的位置*,**: 打散
# 形參: 聚合
def func(*food): # 聚合, 位置引數
    print(food)
lst = ["雞蛋","煎餅果子","豬蹄","滋滋冒油"]
# # 實參: 打散
func(*lst) # 打散. 把list, tuple, set, str 進行迭代打散
聚合成關鍵字引數
# def func(**kwargs):
#     print(kwargs)
#
# dic = {"name":'alex', 'age':'18'}
# func(**dic) # 打散成關鍵字引數

3.名稱空間

載入順序:
1. 內建名稱空間
2. 全域性名稱空間
3. 區域性名稱空間(函式被執行的時候)
取值順序:
1. 區域性名稱空間
2. 全域性名稱空間
3. 內建名稱空間

 def outer():
#     print("哈哈")
#     def inner_1():
#         print("呵呵")
#         def inner_1_1():
#             print("嘻嘻")
#         inner_1_1()
#         print("吼吼")
#     def inner_2():
#         print("嘿嘿")
#     inner_2()
#     inner_1()
# outer()
輸出結果:
哈哈
嘿嘿
呵呵
嘻嘻
吼吼

作用域

print(globals()) # 可以檢視全域性作用域中的內容
print(locals()) # 檢視當前作用域中的內容

全域性作用域: 包含內建名稱空間和全域性名稱空間. 在整個檔案的任何位置都可以使用(遵循
從上到下逐行執行).
區域性作⽤用域: 在函式內部可以使用.
作用域名稱空間:
1. 全域性作用域: 全域性名稱空間 + 內建名稱空間
2. 區域性作用域: 區域性名稱空間
我們可以通過
globals()函式來檢視全域性用域中的內容,
locals()來檢視區域性作用域中的變數和函式資訊

4.函式巢狀

函式是可以互相巢狀的

5.  global和nonlocal關鍵
global: 在區域性訪問全域性中的內容
nonlocal: 在區域性尋找外層函式中離他最近的那個變數

函式名的應用:(第一類物件)
    函式名的命名規範和變數是一樣的
    函式名其實就是變數名

    可以作為列表中的元素進行儲存
    def func1():
        pass
    def func2():
        pass
    list = [func1,func2]
    for el in list:
        el()

    可以作為引數傳遞給函式
    def func():
        pass
    def proxy(fn):
        fn()
    proxy(func)

    可以作為函式的返回值
    def func():
        def inner():
            pass
        return inner)
    func()()
2,閉包
    在內層函式中訪問外層函式的區域性變數
    好處:
        1,保護你的變數不受外界影響
        2,可以讓變數常駐記憶體
    寫法:
        def outer():
            a = 10
            def inner():
                print(a)
            return inner

  

相關文章