python方法名加__学习python中__name__方法使用
今天在自學生產者消費者模型時,發現了一個有趣的方法
if__name__ == "__main__":
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-8
import threading
import 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()
特此記錄,學而時習之!
總結
以上是生活随笔為你收集整理的python方法名加__学习python中__name__方法使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python语言1002python语言
- 下一篇: Java文件读写操作指定编码方式防乱码