标签:
内容目录:
python中无块级作用域
if 1 == 1:
name = ‘jabe‘
print(name)
#可以正常输出jabe
#在python中无块级作用域
#在c#或者java中是不能这样使用的,提示name未定义的
python中以函数为作用域
def func():
name = ‘jbae‘
func()
print(name)
#会提示name为定义的报错,说明在python中以函数为作用域的
python作用域链由内想外找,直到找不到报错
name = ‘jabe‘
def f1():
# name = ‘a‘
def f2():
# name = ‘b‘
print(name)
f2()
f1()
#输出
jabe
函数执行前,作用域(链)已经确定
name = ‘jabe‘
def f1():
print(name)
def f2():
name = ‘ljb‘
f1()
f2()
输出:
jabe
#===============================
name = ‘jabe‘
def f1():
print(name)
def f2():
name = ‘ljb‘
return f1
ret = f2()
ret()
输出:
jabe
lambda函数作用域
li = [lambda :x for x in range(10)]
r = li[0]()
print(r)
print(‘===================‘)
#输出为9,上面的例子等同于下面的代码
li = []
for i in range(10):
def f1():
return i
li.append(f1)
#li 为列表,内部的元素为相同功能的函数
print(li[0]()) print(li[1]()) print(li[2]()) print(li[3]()) #输出: # 9 # =================== # 9 # 9 # 9 # 9
由于函数为被调用时是未被执行的,所以当循环结束时i为9,最后调用时候显示均为9
上面的函数我们稍作更改就可以打印的不为9了
li = []
for i in range(10):
def f1(x=i):
return x
li.append(f1)
#li 为列表,内部的元素为相同功能的函数
print(li[0]())
print(li[1]())
print(li[2]())
print(li[3]())
#输出:
# 0
# 1
# 2
# 3
上面的例子中因为每次执行循环,将i值赋给x,因此打印的为0,1,2,3
我们从以前学过的知识中可以知道,python3.5类的多重继承顺序为从左到右,由下到上的顺序来继承寻找的。
在python2.7中,如果为新式类和py3.5中是寻找的顺序是一样的,但是经典类的继承顺序稍有不同,一直深层寻找,直到找到为止,不会向右边寻找。
不继承object是经典类,继承object是新式类 (和py3中一致)
python运维开发(十)----IO多路复用多线程、进程、协程
标签:
原文地址:http://www.cnblogs.com/Jabe/p/5659212.html