-
L即函数内部的,如func内部的passline
E:in_func
G:第1行的passline为全局变量
B:Max中的max
查看全部 -
legb:
查看全部 -
闭包函数:内部函数中对enclosing作用域的变量进行引用
查看全部 -
#装饰器,结合上一节课的例子学习。
1:装饰器用来装饰函数;
2:返回一个函数对象;
3:被装饰函数标识符指向返回的函数对象;
4:语法糖 @deco
查看全部 -
为什么要:
def dec(func):
return in_dec
可以理解成只是在函数内部定义了内部函数但不一定会调用这个函数,而如果是return in_dec就肯定是调用了这个函数了。
查看全部 -
想在闭包中调用函数:记住函数也是一个对象,所以在return时调用这个函数即可。
接下来的赋值什么的完全一样。
查看全部 -
在C,中好像也干过这事,不过当时应该是传入了两个变量进行比较
查看全部 -
#coding:utf-8
def fun_100(val):
passline = 60
if val >= passline :
print "Pass : %d" %val
else :
print "Failed"
def fun_150(val):
passline = 90
if val >= passline :
print "Pass : %d" %val
else :
print "Failed"
fun_100(89)
fun_150(89)
#闭包的使用
def set_passline(passline):
def cmp(val):#(passline,val)
if val >= passline:
print "Pass : %d" %val
else :
print "Failed"
return cmp #如果不返回函数,就无法将内部函数保存下来,那么一次引用之后就没有用了
f_100 = set_passline(60)
f_150 = set_passline(90)
f_100(89)
f_150(89)
查看全部 -
#coding:utf-8
passline = 60
def func(val):
print ('%x'%id(val))
if val >= passline:
print ('pass')
else :
print('failed')
def in_func(): #(val,),闭包的含义,将函数内部变量直接添加到内部函数中
print(val)
in_func()
return in_func
f = func(89)
#f() #==in_fun()
#pass
#89 in_fun()
#89 f()
print (f.__closure__)
查看全部 -
def cmp(val): #将我们的passline添加到我们set_passline()的属性中,称之为闭包。
查看全部 -
如果我们引用函数enclosing中的变量,那么当我们再次查找这个变量的时候,我们就不能在代码中找到它,而是在函数属性中依次有它的位置。
这里所说的再次查找是指在in_func()中打印时去查找它?还是指在f()中去查找它?
查看全部 -
函数返回值的重要性质:它在产生之后会不会被回收
如果你返回的是函数,变量f就是接受这个返回函数的函数,调用时就应该加上参数,如果有你定义时没有参数就是直接加上括号。
def in_func():
print (val)
查看全部 -
闭包作用
1、封装
2、代码复用
查看全部 -
#coding:utf-8
passline = 60
def func(val):
if val >= passline:
print ('pass')
else :
print('failed')
def in_func():
print(val)
in_func()
return in_func
f = func(89) #函数func()返回值是一个函数
f() #in_func ,由于in_func()作为一个返回值存在(引用值不为),所以他不会变成0,但是val只是作为函数内部定义的变量,所以函数调用完会回收回去。
查看全部 -
函数实质与属性:
1、函数是一个对象
2、函数执行完成后内部变量回收
3、函数属性
4、函数返回值
查看全部 -
作用域的分级
查看全部 -
函数作用域:L>E>G>B(计算机查找顺序)
L:local 函数内部作用域
E:enclosing 函数内部与内嵌函数之间(即闭包)
G:global 全局作用域
B:build-in 内置作用域
查看全部 -
装饰器的实质就是对闭包的使用
查看全部 -
闭包就是内置函数对enclosing作用域变量的使用,它会将我们这个变量放到closure这个属性中,内部函数进行处理时,可以拿过来直接使用
查看全部 -
函数的实质
查看全部 -
LEGB:
查看全部 -
课程主要内容
查看全部 -
LEGB: L>E>G>B 查找顺序优先级
L:local函数内部作用域,是最底层的单个函数里面;
E:enclosing函数内部与内嵌函数之间,是有内部函数的函数里面;
G:global 全局作用域,是一个.py文件中;
B:build-in内置作用域,比如:tuple,list,元组。是所有.py文件中。
查看全部 -
查看全部
举报