天天看點

python之路--day10-閉包函數

1.命名關鍵字參數

  格式:在*後面的參數都是命名關鍵字參數

  特點:

    1.必須被傳值

    2.限制函數的調用者必須按照key=value的形式傳值

    3.限制函數的調用者必須用我們指定的key名

1 def auth(*args,**kwargs):
 2     """
 3     使用方式auth(name="egon",pwd="123")
 4     :param args:
 5     :param kwargs:
 6     :return:
 7     """
 8     # print(args,kwargs)
 9     if len(args) !=0:
10         print('必須用關鍵字的形式傳參')
11         return
12     if 'name' not in kwargs:
13         print('必須用指定的key名name')
14         return
15     if 'pwd' not in kwargs:
16         print('必須用指定的key名pwd')
17         return
18 
19     name=kwargs['name']
20     pwd=kwargs['pwd']
21     print(name,pwd)      

2.函數嵌套

  1.函數的嵌套調用:在函數内又調用了其他函數

  

def max(x,y):
    if x>y:
        reryrn x
    else:
        return y
def max3(x,y,z):
    res1 = max2(x,y)
    res2 = max2(rea1,z)
    return res2
print(max3(11,199,2))      

  2,函數的嵌套定義:在函數内又定義了其他函數

def func1():
    print('from func1')
    def func2(): #func2=記憶體位址
         print('from func2')

func1()      
def f1():
    print('f1')
    def f2():
        print('f2')
        def f3():
            print('f3')
        f3()
    f2()
f1()

'''
f1
f2
f3
'''      

3.名稱空間和作用域

  1.名稱空間:存放名字和值綁定關系的地方

  1.2.名稱空間分類: 

    1.2.1内置名稱空間:存放python解釋器自帶的名字,在解釋器啟動時就生效,解釋器關閉則失效

    1.2.2全局名稱空間:檔案級别的名字,在執行檔案的時候生效,在檔案結束或者在檔案删除的時候失效

    1.2.3局部名稱空間:存放函數内定義的名字(函數的參數以及函數内名字都存放在局部變量空間)---在函數調用時臨時生效,函數結束則失效

      加載順序:内置名稱空間-----全局名稱空間---局部名稱空間

      查找名字:局部名稱空間-----全局名稱空間-----内置名稱空間

  2:作用域

  1.全局變量域:包含的是内置名稱空間與全局名稱空間的名字

  特點:

      在任何位置都能通路到

      該範圍内的名字會伴随程式整個生命周期

  2.局部作用域:包含的是局部名稱空間的名字

   特點:

       隻能在函數内使用

      調用函數是生效,調用結束失效

4,函數對象

  1,函數可以被引用

def bar():
    print('from bar')

f =bar
f()      

  2,可以當作參數傳入

 

def bar():
        print(’from bar‘)

def wrapper(func):
        func()
wrapper(bar)      

  3,可以當作函數的傳回值

def bar():
    print(’from bar‘)
def foo(func):
    return func

f = foo(bar)
f()      

  4,可以當作容器類型的元素

def get():
     print('from get')

def put():
     print('from put')

l=[get,put]

print(l)

l[0]()      
def auth():
    print('登陸。。。。。')

def reigster():
    print('注冊。。。。。')

def search():
    print('檢視。。。。')

def transfer():
    print('轉賬。。。。')

def pay():
    print('支付。。。。')

dic={
    '1':auth,
    '2':reigster,
    '3':search,
    '4':transfer,
    '5':pay
}

def interactive():
    while True:
        print("""
        1 認證
        2 注冊
        3 檢視
        4 轉賬
        5 支付
        """)
        choice=input('>>: ').strip()
        if choice in dic:
            dic[choice]()
        else:
            print('非法操作')


interactive()      

5,閉包函數

  定義在函數内部的函數,并且該函數包含對外部函數作用域中名字的引用,該函數就成為閉包函數

def outter():
     name='egon'
     def inner():
         print('my name is %s' %name)

     return inner

inner()被稱為閉包函數。
inner()定義在函數outter外部,outter函數的作用域内部變量name,在inner内被引用      

轉載于:https://www.cnblogs.com/guodengjian/p/8665479.html