目錄
- 一、總結(jié)
- 二、全面加速(pypy)
- 二、減少文件的打開(kāi)即with的調(diào)用
- 三、if判斷靠前
一、總結(jié)
1、使用pypy
2、減少函數(shù)化調(diào)用
3、減少文件的打開(kāi)即with的調(diào)用,將這一調(diào)用放在for循環(huán)前面,然后傳遞至后面需要用到的地方
4、if函數(shù)判斷條件多的盡量在前面
全面加速(pypy)
二、全面加速(pypy)
將python換為pypy,在純python代碼下,pypy的兼容性就不影響使用了,因?yàn)橐恍┘僷ython的代碼常常會(huì)用pypy進(jìn)行一下加速
測(cè)試代碼,for循環(huán)10000000次
start = time.time()
for i in range(10000000):
print(i,end="\r")
end = time.time()
print(f"耗費(fèi)時(shí)間{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
pypy的耗時(shí)為:

而python耗時(shí)為

大致三倍,但是循環(huán)越多估計(jì)越快,據(jù)說(shuō)有6倍左右
二、減少文件的打開(kāi)即with的調(diào)用
原代碼的with在調(diào)用函數(shù)內(nèi),即每次調(diào)用函數(shù)都要打開(kāi)并關(guān)閉文件,造成大量耗時(shí)
def BMES(word,tag):
with open(r"J:\PyCharm項(xiàng)目\學(xué)習(xí)進(jìn)行中\(zhòng)NLP教程\NLP教程\數(shù)據(jù)集\詞性標(biāo)注\nature2ner.txt","a+",encoding="utf-8")as f_:
if len(word) == 1:
"""單字"""
f_.write(word + " " + f"S-{tag.upper()}" + "\n")
else:
"""多字"""
for index, word_ in enumerate(word):
if index == 0:
f_.write(word_ + " " + f"B-{tag.upper()}" + "\n")
elif 0 index len(word) - 1:
f_.write(word_ + " " + f"M-{tag.upper()}" + "\n")
else:
f_.write(word_ + " " + f"E-{tag.upper()}" + "\n")
#后續(xù)在多個(gè)if-elif-else中調(diào)用
耗時(shí)為

tqdm預(yù)估時(shí)間在15~25個(gè)小時(shí)左右跳動(dòng)
將with放在循環(huán)前面
如

將with的內(nèi)容作為f_傳遞進(jìn)來(lái)

后的耗時(shí)為:

測(cè)試如下:
import os, warnings,time,tqdm
def txt(word):
with open("ceshi.txt","a+",encoding="utf-8")as f:
if len(str(word))=2:
word+=100
f.write(str(word)+"\n")
elif 2len(str(word))=4:
word+=200
f.write(str(word)+"\n")
else:
f.write(str(word) + "\n")
if __name__=="__main__":
start = time.time()
for i in tqdm.tqdm(range(100000)):
txt(i)
end = time.time()
print(f"耗費(fèi)時(shí)間{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
耗時(shí)結(jié)果為:

將文件的打開(kāi)即with的調(diào)用放在外面
import os, warnings,time,tqdm
def txt(f,word):
if len(str(word))=2:
word+=100
f.write(str(word)+"\n")
elif 2len(str(word))=4:
word+=200
f.write(str(word)+"\n")
else:
f.write(str(word) + "\n")
if __name__=="__main__":
start = time.time()
with open("ceshi.txt", "a+", encoding="utf-8")as f:
for i in tqdm.tqdm(range(100000)):
txt(f,i)
end = time.time()
print(f"耗費(fèi)時(shí)間{end-start}秒>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
耗時(shí)為

結(jié)論:快了119倍,而實(shí)際加速遠(yuǎn)遠(yuǎn)大于這個(gè)倍數(shù)
三、if判斷靠前
如:
if tag in ["nts", "nto", "ntc", "ntcb", "ntcf", "ntch", "nth", "ntu", "nt"]:
BMES(f_,i2, tag="ORG")
elif tag in ["nb", "nba", "nbc", "nbp", "nf", "nm", "nmc", "nhm", "nh"]:
BMES(f_,i2, tag="OBJ")
elif tag in ["nnd", "nnt", "nn"]:
BMES(f_,i2, tag="JOB")
elif tag in ["nr", "nrf"]:
BMES(f_,i2, tag="PER")
elif tag in ["t"]:
BMES(f_,i2, tag="TIME")
elif tag in ["ns", "nsf"]:
BMES(f_,i2, tag="LOC")
else:
for i3 in list(i2):
f_.write(i3 + " " + f"O" + "\n")
滿(mǎn)足條件的可以先跳出判斷
到此這篇關(guān)于python運(yùn)行加速的幾種方式的文章就介紹到這了,更多相關(guān)python運(yùn)行加速的幾種方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python入門(mén)課程第二講之怎么運(yùn)行Python
- Python運(yùn)行第一個(gè)PySide2的窗體程序
- Python命令行運(yùn)行文件的實(shí)例方法
- python腳本打包后無(wú)法運(yùn)行exe文件的解決方案
- 沒(méi)有安裝Python的電腦運(yùn)行Python代碼教程