• 第三章 3.5 函数进阶


    名称空间 闭包 装饰器

    名称空间共三种

    locals 函数内名字空间 包括局部变量和形参

    globals 全局变量 函数定义所在模块的名字空间

    builtins 内置模块的名字空间

    作用域范围

    全局范围

    局部范围

    作用域查询顺序

    LEGB  代表名字查找顺序 locals > enclosing function > globals > _builtins_

     locals 函数内名字空间 包括局部变量和形参

     enclosing 外部嵌套函数的名字空间

     globals 全局变量 函数定义所在模块的名字空间

     builtins 内置模块的名字空间

    闭包

    def outer():
        name  = 'alwx'

        def inter():

            print('在inter里打印外层函数的变量‘,name)

        return inner

    f = outer()

    f()

    闭包函数的意义:

    返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹一层作用域,这使得该函数无论在何处调用,优先使用自己外部包裹的作用域

    装饰器

    开放-封闭 原则

    封闭:已经实现的功能代码块不应该被修改

    开发:对现有功能的扩展开发

    带参数的装饰器

    #_*_coding:utf-8_*_

    user_status = Flase 用户登录了就把这个改成True

    def login(auth_type):

        def auth(func):

            def inner(*args,**kwargs):

                if auth_type == 'qq':

                    _username==''qq''

                     _userpassword = 'abc123'

                   global user_status

                   if user_status == Flase:

                       username = input('user')

                       userpassword = input('password')

                        if username == _username and userpassword == _userpassword:

                            print('welcome login)

                             user_status = True

                       else:

                            print('wrong username or userpassword)

                   if user_status ==True:

                       return func(*args,**kwargs) 只要验证通过了就调用相应功能

              else:

                  print('only support qq ')

           return inner 用户调用login时 只返回inner 的内存地址 , 下次再次调用是加上()才会执行inner函数

    return auth

    def home()

       print('首页')

    @login('weibo')

    def henan(style):

        '''

       parme style 喜欢什么类型的就传进来

       return     

       '''

  • 相关阅读:
    生活中的大数据 hadoop
    IOS设计模式学习(11)中介者
    Java 编程的动态性,第3部分: 应用反射--转载
    Java编程 的动态性,第 2部分: 引入反射--转载
    Java 编程的动态性 第1 部分: 类和类装入--转载
    斐波那契数列(fabnacci)java实现
    Chrome调试大全--转载
    jboss7 加载module过程
    UML解惑:图说UML中的六大关系--转
    jboss学习
  • 原文地址:https://www.cnblogs.com/mayicai/p/9152466.html
Copyright © 2020-2023  润新知