zoukankan      html  css  js  c++  java
  • 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内被引用
  • 相关阅读:
    锁:synchronized原理
    锁:synchronized与Lock的区别
    锁:java内存模型JMM(JMM)
    spring:Beanfactory和ApplicationContext、BeanFactory 和 FactoryBean
    锁:synchronized(synchronized保证三大特性、synchronized的特性)
    JS类的继承
    JS类—class
    json数据格式
    软件工程的bug
    软件工程的历史
  • 原文地址:https://www.cnblogs.com/guodengjian/p/8665479.html
Copyright © 2011-2022 走看看