名称空间 闭包 装饰器
名称空间共三种
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
'''