码迷,mamicode.com
首页 > 编程语言 > 详细

python运维开发(十)----IO多路复用多线程、进程、协程

时间:2016-07-11 21:16:25      阅读:473      评论:0      收藏:0      [点我收藏+]

标签:

内容目录:

  • python作用域
  • python2.7和python3.5的多继承区别
  • IO多路复用
  • 多线程、进程、协程

python作用域

 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

python2.7和python3.5的多继承区别

我们从以前学过的知识中可以知道,python3.5类的多重继承顺序为从左到右,由下到上的顺序来继承寻找的。

在python2.7中,如果为新式类和py3.5中是寻找的顺序是一样的,但是经典类的继承顺序稍有不同,一直深层寻找,直到找到为止,不会向右边寻找。

不继承object是经典类,继承object是新式类 (和py3中一致)

IO多路复用

 

多线程、进程、协程

 

python运维开发(十)----IO多路复用多线程、进程、协程

标签:

原文地址:http://www.cnblogs.com/Jabe/p/5659212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!