码迷,mamicode.com
首页 > 编程语言 > 详细

python之路--day10-闭包函数

时间:2018-03-28 20:24:37      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:分类   函数对象   函数嵌套   while   认证   包含   key   文件的   pre   

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():
    printfrom 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内被引用

 

python之路--day10-闭包函数

标签:分类   函数对象   函数嵌套   while   认证   包含   key   文件的   pre   

原文地址:https://www.cnblogs.com/guodengjian/p/8665479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!