内容目录:
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