——————————————————————————书接上文——————————————————————————
-
线程中调用类
线程中不仅可以调用函数名:threading.Thread(target=函数名)
同样
可以调用类:变量 = 类名() (调用类:这种情况一般适用于一个线程里面做的事情比较复杂,而且分成了多个函数,一般就会封 装成一个类,
变量.start() 在类中创建一个run()的实例对象,然后用线程调用即可)
例:
上例中,main中是主线程,类Mythread中的run(),sing(),dance()分别是三个子线程,也就是说一共有4个线程在执行,所以在退出子线程时所用到的条件是enumerate的内容等于两个,而不是一个,最后结果如下:
-
子线程之间共享全局变量
举个例子:
执行结果如下:
从结果中可以看出,子线程之间是共享全局变量的
顺便说一下全局变量:如何区分全局变量和局部变量:
1. 如何区分全局变量和局部变量:
全局变量写在函数外面
局部变量写在函数里面
2. 在函数中修改全局变量,什么时候必须要用global?什么时候可以不用global?
a. 如果要修改全局变量指向的数据的值,可以不使用global
例:
b. 如果要修改全局变量的指向(比如让全局变量=另外一个地址空间),必须使用global
例:
c. 如果要修改不可变的数据类型(数字,字符串,元组),必须使用global(参考b例)
d. 如果修改可变的数据类型(列表,集合,字典),有些方法可以不使用global
不使用的情况参考 a例
使用的情况参考下例: