❶ 如何判斷python程序運行在cmd中或pycharm中
取巧的辦法,判斷是不是文件右鍵運行的
import time
import os
for i in range(100):
# 不是pycharm運行
if __name__ != '__main__':
print(i)
time.sleep(0.1)
os.system('cls')
# 是pycharm右鍵運行
else:
print(f'\r{i}',end='',flush=True)
time.sleep(0.1)
❷ python怎麼看程序是否在運行
你說的文件有沒有運行,指的是什麼意思?是說一個應用程序有沒有被運行?還是一個文件讀取到尾巴了?
如果是前者,那麼你再使用os.popen,可以拿到運行應用程序的劇本,然後你可以查看這個運行程序的狀態,是否在運行是否結束。
如果是看文件,有沒有讀到底那你就直接for循環到底他就自動沒有數據了
❸ python判斷是否繼續
python判斷是否繼續是因為你的代碼發生了錯誤。
在執行第一個文件後,程序停止並詢問是否繼續批處理。這會導致用戶輸入延遲。希望我的回答能夠幫到你,如果不明白,您可以繼續追問!謝謝!祝您生活愉快!
❹ python提供了哪三個非常重要的語句來應對python程序在運
1、If語句詳解與實踐
之前已經用過很多次If函數了,這邊我再做一個簡單介紹和一些新內容的補充吧,If函數的底層邏輯就是用來判斷,如果滿足條件則執行下面的語句。
基本的語法邏輯如下,注意記得寫冒號及代碼前的縮進:
if 條件:
代碼1
else:
代碼2
1
2
3
4
其中兩個注意點,之前也提過了,就是縮進與英文格式的標點符號,有的時候,你忘記縮進或者冒號是中文格式的時候,程序就會報錯,不過Pycharm和Spyder都會在那一行提醒你這一行的寫法有問題,所以倒也不用太擔心。
現在我們再來看看之前寫過這個代碼,是不是會感覺清晰很多呢。
score = 100
year = 2018
if (score < 0) and (year == 2018):
print('錄入資料庫')
else:
print('不錄入資料庫')
1
2
3
4
5
6
我們下面再補充些內容,其實掌握上面的內容已經完全足夠了,下面的只是作為一個知識點的補充。比如你考試考了80分,最簡單的是:
score = 85
if score >= 60:
print('及格')
else:
print('不及格')
1
2
3
4
5
我相信現在大家看這個代碼已經完全沒有問題了,輸出肯定是『及格』。那如果我除了想判斷是否及格外,還想看它是否優秀(大於80分),則輸出『優秀』,該怎麼弄呢。
score = 55
if score >= 80:
print('優秀')
elif (score >= 60) and (score < 80):
print('褲豎及格')
else:
print('不及格')
1
2
3
4
5
6
7
這邊唯一的一個不同,就是中間加入了一個elif,這個其實就是elseif的縮寫,用來提供多個結果使用的,
其實這個我做項目的時候基本沒有用過,大家簡單了解下即可。
2、For語句詳解與實踐
For語句之前有提到過一次,它的重要程度可以說僅次於If語句了,它的底層邏輯是循環,其實While的底層邏輯是循環,不過還是For用的更加普遍些。
For語句的常見使用格式為,注意記得寫冒號及代碼前的縮進:
for i in 區域:
代碼
1
2
先舉個之前講列表的時候講過的例子:
class1 = ['丁一', '王二麻子', '張三', '李四', '趙五']
for i in class1:
print(i)
1
2
3
用大白話來說就是:
列表class1 = ['丁一', '王埋純茄二麻子', '張三', '李四', '趙五']
對於class1中的所有元素i:
我們都把它列印輸出出來
1
2
3
這個輸出代碼為:
丁一
王二麻子
張三
李四
趙五
1
2
3
4
5
這個i可以換成任何東西,比如你換成j,換成一個字元串,只要和下面的print()裡面的內容匹配即可。
比如我們可以寫:
class1 = ['丁一', '王二麻子', '張三', '李四', '趙五']
for haha in class1:
print(haha)
1
2
3
這樣輸出的結果其實是一樣的。
For語句還通常與range()函數合用,range函數的話其實就是一個類似於list的東西,只不過它可能更像list的長度,你想循環多少次,在range的括弧里填寫幾就可以,比如我寫for i in range(3),那麼它就是循環3次:
for i in range(3):
print('hahaha')
1
2
這個它就會輸出三行『hahaha』。
我擔心大家可能會對這個for i in range(3)中的i還有疑惑,剛剛i不是代表列表裡的每一個元素嗎,這邊這個i又是什麼意思呢?這邊我給大家做一個偷懶的總結:
(1)對於"for i in 區域"來說,如果說這個區域是一個列表,那麼那個i就表示這個列表裡的每一個元素;
(2)對於"for i in 區域"來說,如果說這個區域是一個range(n),那麼那個i就表示0到n -1這n個數字,之前提到過,python中序號都是從0開始的,所以這邊彎察也是從0開始,到n - 1結束。
(3)對於"for i in 區域"來說,如果說這個區域是一個字典,那麼i表示的就是字典的中的鍵(了解即可,很長一段時間用不到)
還有個非常重要的知識點:for i in range(5)的話,它的確會循環5次,但要注意,在python中,第一個元素的序號其實是0,所以如果我們輸入如下代碼:
for i in range(5):
print(i)
1
2
那麼輸出的結果是從0開始的,也就是0到4
0
1
2
3
4
1
2
3
4
5
這時候你可能要問,這玩意有什麼用?下面我就以輿情監控中的實戰來給大家講解下for語句在爬蟲實戰中的應用:
title = ['標題1','標題2','標題3','標題4','標題5']
for i in range(len(title)): #len(title)表示一個有多少個新聞,這里是5
print(str(i+1) + '.' + title[i]) #這個其實把字元串進行一個拼接
1
2
3
上面這幾行代碼已經很大程度就是你做項目實戰用到的代碼了,暫時看著有點暈也沒有關系,我在教學視頻里會詳細介紹下的。我先用大白話來解釋下這幾行代碼在幹嘛:
爬到了一些新聞標題,放到了title這個列表裡
用len(title)來獲取一共有多少條新聞,並利用for和range語句來進行循環:
列印輸出新聞標題,並且在前面加上序號
1
2
3
輸出結果如下圖所示:
其中有幾個小注意點,
(1)range(len(title))這邊就相當於range(5),因為len(title)就等於5,所以for i in range(len(title))就是循環5次,這里的i就表示數字0-4。
(2)為什麼要寫str(i + 1),因為我們要標序號,'標題1』是字元串形式的,而i是數字,我們講過數字和字元串不能直接相加,所以要用str函數進行下轉換。
(3)至於為什麼不是str(i),而是str(i + 1)。是因為之前講列表的時候提到過,在編程中,第一個序號都是0,比如之前列表裡講過的class1[0]表示「丁一」一樣,這邊如果寫str(i)的話,那麼輸出的第一個序號就是「0.標題1」了。
(4)因為這里的i就表示數字0-4,title[i]的話,表示列表中的第i+1個元素,所以title[0]的話就表示第1個元素,title[4]就表示第5個元素。
通過for循環和range()函數和len()函數的聯合使用,可以同時列印多個列表中的元素,代碼如下:
# 在實戰中的應用(可以同時列印多個列表中的內容)
title = ['標題1', '標題2', '標題3', '標題4', '標題5']
href = ['網址1', '網址2', '網址3', '網址4', '網址5']
for i in range(len(title)): # len(title)表示一個有多少個新聞,這里是5;這里的i就表示數字0-4
print(str(i+1) + '.' + title[i]) # 這個其實把字元串進行一個拼接
print(href[i])
1
2
3
4
5
6
3、While語句詳解與實踐
While的底層邏輯也是循環,它和For的特點不一樣,最大的區別是For知道循環次數,而While的話則是不清楚循環次數。
其使用格式為,注意要寫冒號以及代碼前的縮進:
while 條件:
要執行的的代碼
1
2
舉個例子給大家看下:
a = 1
while a < 3:
print(a)
a = a + 1 #或者寫成 a += 1
1
2
3
4
它白話的意思就是:
首先將1賦值給a
當 a 小於3的時候:
列印輸出a
a 在原來的基礎上加上1
1
2
3
4
a一開始等於1,滿足小於3的條件,會列印輸出1,然後a加上1等於2,此時a仍然小於3,所以仍然會執行列印輸出的命令,此時列印輸出2,然後a在2的基礎上加上1等於3,此時a已經不滿足小於3的條件了,那麼循環此時便終止了。最後輸出如下:
1
2
1
2
大家可以試著把數字3換成別的數試試看。
其實我們之後大多情況下用到While的時候,就是讓While來一直循環(如果用for i in range(n),無論n多大,那麼早晚都有結束的時候),這個在爬蟲實戰中的具體應用是:當每爬完一次,就自動進行下一次爬取,實現24小時不間斷爬取。那麼While如何能實現一直循環呢?
具體的方法其實很簡單,那就用while True進行永久循環。
while True:
代碼塊
1
2
給大家截個圖看下,下面這張圖就是最終的代碼效果,這個while True就是輿情監控系統實現24小時不間斷爬取的秘訣,有個注意點,這個True得大寫首字母,之後講到的時候再詳細介紹:
大家如果想停止while True的不停的循環,可以在點擊右上角的紅色終止按鈕即可。我當初自己學的時候,寫過這么兩行代碼
❺ 7種檢測Python程序運行時間、CPU和內存佔用的方法
1. 使用裝飾器來衡量函數執行時間
有一個簡單方法,那就是定義一個裝飾器來測量函數的執行時間,並輸出結果:
import time
from functoolsimport wraps
import random
def fn_timer(function):
@wraps(function)
def function_timer(*args, **kwargs):
t0= time.time()
result= function(*args, **kwargs)
t1= time.time()
print("Total time running %s: %s seconds" %
(function.__name__, str(t1- t0))
)
return result
return function_timer
@fn_timer
def random_sort(n):
return sorted([random.random() for i in range(n)])
if __name__== "__main__":
random_sort(2000000)
輸出:Total time running random_sort: 0.6598007678985596 seconds
使用方式的話,就是在要監控的函數定義上面加上 @fn_timer 就行了
或者
# 可監控程序運行時間
import time
import random
def clock(func):
def wrapper(*args, **kwargs):
start_time= time.time()
result= func(*args, **kwargs)
end_time= time.time()
print("共耗時: %s秒" % round(end_time- start_time, 5))
return result
return wrapper
@clock
def random_sort(n):
return sorted([random.random() for i in range(n)])
if __name__== "__main__":
random_sort(2000000)
輸出結果:共耗時: 0.65634秒
2. 使用timeit模塊
另一種方法是使用timeit模塊,用來計算平均時間消耗。
執行下面的腳本可以運行該模塊。
這里的timing_functions是Python腳本文件名稱。
在輸出的末尾,可以看到以下結果:4 loops, best of 5: 2.08 sec per loop
這表示測試了4次,平均每次測試重復5次,最好的測試結果是2.08秒。
如果不指定測試或重復次數,默認值為10次測試,每次重復5次。
3. 使用Unix系統中的time命令
然而,裝飾器和timeit都是基於Python的。在外部環境測試Python時,unix time實用工具就非常有用。
運行time實用工具:
輸出結果為:
Total time running random_sort: 1.3931210041 seconds
real 1.49
user 1.40
sys 0.08
第一行來自預定義的裝飾器,其他三行為:
real表示的是執行腳本的總時間
user表示的是執行腳本消耗的CPU時間。
sys表示的是執行內核函數消耗的時間。
注意:根據維基網路的定義,內核是一個計算機程序,用來管理軟體的輸入輸出,並將其翻譯成CPU和其他計算機中的電子設備能夠執行的數據處理指令。
因此,Real執行時間和User+Sys執行時間的差就是消耗在輸入/輸出和系統執行其他任務時消耗的時間。
4. 使用cProfile模塊
5. 使用line_profiler模塊
6. 使用memory_profiler模塊
7. 使用guppy包
❻ 關於python 命令控製程序啟動與結束
可以使用一個標志變數來控製程序的啟動和結束。
首先,在主程序中設置一個標志變數,例如 running,用於指示程序是否處於運行狀態。在程序開始時,running 應設置為 False。
然後,在每次循環中檢查 running 的值。如果 running 為 True,則執行 auto() 函數;如果 running 為 False,則等待用戶輸入命令。
當用戶輸入 qd 命令時,將 running 設置為 True,並執行 auto() 函數。當用戶輸入 tz 命令時,將 running 設置為 False,並執行 reset() 函數。
示例代碼如下:
running
running = False
while True:
cmd = input("請輸入命令:")
if cmd == 'qd':
running = True
elif cmd == 'tz':
running = False
if running:
auto()
else:
reset()
在這段代碼中,我們使用了一個 while 循環來不斷接收用戶的命令。在每次循環中,我們會讀入用戶的命令,並根據命令的不同設置 running 的值。如果 running 為 True,則執行 auto() 函數;如果 running 為 False,則執行 reset() 函數。
這樣,用戶就可以隨時輸入 tz 命令來停止程序,也可以輸入 qd 命令來重新啟動程序。
希望這些信息能夠幫助您。