搜索
您的当前位置:首页正文

学习python中__name__方法使用

2020-12-07 来源:易榕旅网
学习python中__name__⽅法使⽤

今天在⾃学⽣产者消费者模型时,发现了⼀个有趣的⽅法

if: for i in range(2): p = Producer() p.start()

for i in range(10): c = Consumer() c.start()

于是就去确认了⼀下度娘,果然好多初学者都会问这个问题,思路解释如下:1. 如果模块是被导⼊,__name__的值为模块名字

2. 如果模块是被直接执⾏,__name__的值为’__main__’亦或有⼀些解释

1:__name__是⼀个变量。前后加了爽下划线是因为是因为这是系统定义的名字。普通变量不要使⽤此⽅式命名变量。2:Python有很多模块,⽽这些模块是可以独⽴运⾏的!这点不像C++和C的头⽂件。3:import的时候是要执⾏所import的模块的。

4:__name__就是标识模块的名字的⼀个系统变量。这⾥分两种情况:假如当前模块是主模块(也就是调⽤其他模块的模块),那么此模块名字就是__main__,通过if判断这样就可以执⾏“__mian__:”后⾯的主函数内容;假如此模块是被import的,则此模块名字为⽂件名字(不加后⾯的.py),通过if判断这样就会跳过“__mian__:”后⾯的内容。

通过上⾯⽅式,python就可以分清楚哪些是主函数,进⼊主函数执⾏;并且可以调⽤其他模块的各个函数等等。上⼀段⽣产者消费者模型代码,来判断代码确认可以简化代码健壮性!

#encoding=utf-8import threadingimport time

condition = threading.Condition()products = 0

class Producer(threading.Thread): '''⽣产者'''

ix = [0] # ⽣产者实例个数

# 闭包,必须是数组,不能直接 ix = 0 def __init__(self, ix=0):

threading.Thread.__init__(self) self.ix[0] += 1

self.setName('⽣产者' + str(self.ix[0])) def run(self):

global condition, products while True:

if condition.acquire(): if products < 10: products += 1;

print(\"{}:库存不⾜,我努⼒⽣产了1件产品,现在产品总数量 {}\". format(self.getName(), products)) condition.notify() else:

print(\"{}:库存充⾜,让我休息会⼉,现在产品总数量 {}\". format(self.getName(), products)) condition.wait(); condition.release() time.sleep(2)

class Consumer(threading.Thread): '''消费者'''

ix = [0] # 消费者实例个数

# 闭包,必须是数组,不能直接 ix = 0 def __init__(self):

threading.Thread.__init__(self) self.ix[0] += 1

self.setName('消费者' + str(self.ix[0])) def run(self):

global condition, products while True:

if condition.acquire(): if products > 1: products -= 1

print(\"{}:我消费了1件产品,现在产品数量 {}\". format(self.getName(), products)) condition.notify() else:

print(\"{}:只剩下1件产品,我停⽌消费。现在产品数量 {}\". format(self.getName(), products)) condition.wait();

condition.release() time.sleep(2)if __name__ == \"__main__\": for i in range(2): p = Producer() p.start()

for i in range(10): c = Consumer() c.start()

  特此记录,学⽽时习之!

因篇幅问题不能全部显示,请点此查看更多更全内容

Top