第三章 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     

   '''

原文地址:https://www.cnblogs.com/mayicai/p/9152466.html