-
顺序:L->E->G->B查看全部
-
LEGB含义查看全部
-
LEGB: local enclosing global build-in查看全部
-
装饰器查看全部
-
好查看全部
-
函数作用域 L E G B查看全部
-
LEGB查看全部
-
legb查看全部
-
#另一个装饰器示例: def deco(func): def in_deco(): print '内部装饰' func() print '调用装饰器' @deco def bar(): print 'in bar' # 到这里就运行,运行结果是:调用装饰器。in_deco根本没有调用,为什么呢?我们看一下运行步骤 # 程序读到@deco,把bar(),以deco的参数形式,装入deco,程序预读整个函数,但不调用in_deco,所以运行到 print '调用装饰器'这句时打印,然后停止。 # 为什么只预读,不调用in_deco呢? # 因为外部函数漏写了一个return in_deco,少了这个,程序就无法返回到in_deco的入口,当然也就无法运行其内部步骤了。 # 强行调用 bar(),结果会报错:TypeError: 'NoneType' object is not callable,因为漏写return in_deco,外置函数实际返回的是 return None。 # 下面纠正上例错误 def deco(func): def in_deco(): print '01 内部装饰' func() print '02 调用装饰器' return in_deco @deco def bar(): print '03 in bar' bar() #打印顺序是 02、01、03。为什么这样? # 第一步:因为@deco,就预读in_deco却不运行(因为此时还不知道func要传入什么),然后打印02,再返回in_deco入口处等待。 # 第二步,因为调用了bar(),启动in_deco,打印01。 # 第三步,遇到fun(),其实就是调用bar(),于是 print '03 in bar'查看全部
-
函数实质与属性 对象的计数值不为0时,不会被回收查看全部
-
闭包概念查看全部
-
被函数调用的变量,其引用计数会在原来基础上加1,需要时刻记住Python中一切皆对象,函数是对象,字面值也是对象,被函数调用的对象会成为函数的一个属性连同函数本体组成一个闭包返回。查看全部
-
闭包内的变量是函数的一个属性,往往是在函数内部定义一个函数,然后返回这个函数,返回的函数中自带的属性是某个变量的值。查看全部
-
LEGB查看全部
-
装饰器就是在原有函数功能上进行装饰添加然后再将原函数和装饰内容结合进行返回查看全部
举报
0/150
提交
取消