python 函数嵌套函数 闭包函数 装饰器
函数的嵌套的定义
在一个函数的内部又定义了另外一个函数
def f1( ):
x = 10
def f2 ( ) : # f2 函数 如同变量 X 一样 只在f1 函数内部有效 外部调用无效.....
print(' from f2 ')
f1( ) # No Error
x # name x is defind
f2( ) # name f2 is defind
名称空间
存放名字的地方,准确的说是存放变量名与绑定关系到地方...
内置名称空间,全局名称空间,局部名称空间。
内置名称空间
Python 解释器启动时,存放一些python内置的名字.....
全局名称空间
文件级别定义的名字,执行文件的时候会产生的名字,不是内置的,也不是在函数里面定义的名字,就是全局名称空间......
(内置函数名字,定义的语法,)
x = 10
def f1():
import os
class foo():
if x == 1 :
z = 3
局部名称空间
在执行文件的过程中,如果调用了函数,则会产生该函数的局部名称空间,
用来存放该函数内部定义的名字,该名字在函数调用时生效,在函数调用结束后失效.....
名称空间加载顺序......
内置名称空间 -------- > 全局名称空间 ------- > 局部名称空间
名字查找到顺序.......
以当前位置之下而上找.......
名字的查找顺序?(在全局无法查看局部的,在局部可以查看全局的)
查看作用域:globals(),locals()

作用域的关系
在函数定义作用域到关系已经固定,与调用位置没有关系,在调用函数时必须回到函数原单位找作用域 ...... (重点!!!)


闭包函数
定义在函数内部的函数,包含对外部作用域名字的引用,而不是对全局作用域名字的引用,那么该函数就称为比包函数 。。。。


装饰器
1 为何要用装饰器:
开放封闭原则:对修改封闭,对扩展开放
2 什么是装饰器
装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。
强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式
装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能
Decorator code

执行结果

@ 符号 干了什么熊事......

来一个有参数 and return vaule


基于装饰器实现登录认证小程序...


带参数的装饰器 ..... 装饰器本身带参


浙公网安备 33010602011771号