本文目錄一覽:
- 1、在python中線程和協程的區別是什麼
- 2、python中列表和元組之間有什麼區別?
- 3、python中的模塊,庫,包有什麼區別
- 4、python中元組和列表有什麼區別
- 5、python中/與//的區別是什麼?
在python中線程和協程的區別是什麼
在python中線程和協程的區別:1、一個線程可以擁有多個協程,這樣在python中就能使用多核CPU;2、線程是同步機制,而協程是異步;3、 協程能保留上一次調用時的狀態,每次過程重入時,就相當於進入上一次調用的狀態。
一、首先我們來了解一下線程和協程的概念
1、線程
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。線程間通信主要通過共享內存,上下文切換很快,資源開銷較少,但相比進程不夠穩定容易丟失數據。
2、協程
協程是一種用戶態的輕量級線程,協程的調度完全由用戶控制。協程擁有自己的寄存器上下文和棧。協程調度切換時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操作棧則基本沒有內核切換的開銷,可以不加鎖的訪問全局變量,所以上下文的切換非常快。
二、協程與線程的比較
1) 一個線程可以擁有多個協程,一個進程也可以單獨擁有多個協程,這樣python中則能使用多核CPU。
2) 線程進程都是同步機制,而協程則是異步。
3) 協程能保留上一次調用時的狀態,每次過程重入時,就相當於進入上一次調用的狀態。
三、線程、協程在python中的使用
1、多線程一般是使用threading庫,完成一些IO密集型並發操作。多線程的優勢是切換快,資源消耗低,但一個線程掛掉則會影響到所有線程,所以不夠穩定。現實中使用線程池的場景會比較多,具體可參考《python線程池實現》。
2、協程一般是使用gevent庫,當然這個庫用起來比較麻煩,所以使用的並不是很多。相反,協程在tornado的運用就多得多了,使用協程讓tornado做到單線程異步,據說還能解決C10K的問題。所以協程使用的地方最多的是在web應用上。
總結一下:
IO密集型一般使用多線程或者多進程,CPU密集型一般使用多進程,強調非阻塞異步並發的一般都是使用協程,當然有時候也是需要多進程線程池結合的,或者是其他組合方式。
推薦課程:Python高級進階視頻教程
python中列表和元組之間有什麼區別?
除了元組是不可變的之外,還應有語義上的區別來指導它們的用法。元組是異構數據結構(即它們的條目具有不同的含義),而列表是同類序列。元組具有結構,列表具有順序。
使用這種區別可以使代碼更加明確和易於理解。
一個示例是成對的頁和行號,以成對參考書中的位置,如:
my_location = (42, 11) # page number, line number
然後,可以將其用作字典中的鍵來存儲有關位置的注釋。另一方面,列表可用於存儲多個位置。自然地,人們可能想在列表中添加或刪除位置,因此使列表可變是有意義的。另一方面,從現有位置添加或刪除項目沒有意義-因此,元組是不可變的。
在某些情況下,可能想更改現有位置元組中的項目,例如在頁面的各行中進行迭代時。但是元組不變性迫使您為每個新值創建一個新的位置元組。從表面上看,這似乎很不方便,但是使用這樣的不可變數據是值類型和函數式編程技術的基石,它可以具有很多優點。
官方Python文檔也提到了這一點
「組是不可變的,並且通常包含一個異類序列…」。
在像Haskell這樣的靜態類型語言中,元組中的值通常具有不同的類型,並且元組的長度必須固定。在列表中,所有值都具有相同的類型,並且長度不是固定的。因此區別非常明顯。
python中的模塊,庫,包有什麼區別
1.python模塊是:
python模塊:包含並且有組織的代碼片段為模塊。
表現形式為:寫的代碼保存為文件。這個文件就是一個模塊。sample.py 其中文件名smaple為模塊名字。
關係圖:
2.python包是:
包是一個有層次的文件目錄結構,它定義了由n個模塊或n個子包組成的python應用程序執行環境。
通俗一點:包是一個包含__init__.py 文件的目錄,該目錄下一定得有這個__init__.py文件和其它模塊或子包。
常見問題:
引入某一特定路徑下的模塊
使用sys.path.append(yourmodulepath)
將一個路徑加入到python系統路徑下,避免每次通過代碼指定路徑
利用系統環境變量 export PYTHONPATH=$PYTHONPATH:yourmodulepath,
直接將這個路徑鏈接到類似/Library/Python/2.7/site-packages目錄下
好的建議:
經常使用if __name__ == ‘__main__’,保證寫包既可以import又可以獨立運行,用於test。
多次import不會多次執行模塊,只會執行一次。可以使用reload來強制運行模塊,但不提倡。
常見的包結構如下:
package_a
├── __init__.py
├── module_a1.py
└── module_a2.py
package_b
├── __init__.py
├── module_b1.py
└── module_b2.py
main.py
如果main.py想要引用packagea中的模塊modulea1,可以使用:
from package_a import module_a1
import package_a.module_a1
如果packagea中的modulea1需要引用packageb,那麼默認情況下,python是找不到packageb。我們可以使用sys.path.append(‘../’),可以在packagea中的__init__.py添加這句話,然後該包下得所有module都添加* import __init_即可。
關係圖:
3.庫(library)
庫的概念是具有相關功能模塊的集合。這也是Python的一大特色之一,即具有強大的標準庫、第三方庫以及自定義模塊。
python中元組和列表有什麼區別
python中元組和列表的區別如下:
1、列表是動態數組,它們不可變且可以重設長度(改變其內部元素的個數);
2、元組是靜態數組,它們不可變,且其內部數據一旦創建便無法改變;
3、元組緩存於Python運行時環境,這意味着我們每次使用元組時無須訪問內核去分配內存。
推薦教程:python教程以上就是小編分享的關於python中元組和列表有什麼區別的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
python中/與//的區別是什麼?
python中/與//的區別是表示含義不同。
在Python中「/」表示浮點數除法,返回浮點結果,也就是結果為浮點數,而「//」在Python中表示整數除法,返回不大於結果的一個最大的整數,意思就是除法結果向下取整。
除法運算 (/) 永遠返回浮點數類型。如果要做 floor division得到一個整數結果(忽略小數部分)你可以使用 // 運算符;如果要計算餘數,可以使用 %。
python中運算符的含義
== :等於 – 比較對象是否相等。 (a == b) 返回 False。
!= :不等於 – 比較兩個對象是否不相等。 (a != b) 返回 true 。
:不等於 – 比較兩個對象是否不相等。 (a b) 返回 true。這個運算符類似 != 。
:大於 – 返回x是否大於y。 (a b) 返回 False。
:小於 – 返回x是否小於y。所有比較運算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價。 (a b) 返回 true。
= :大於等於 – 返回x是否大於等於y。 (a = b) 返回 False。
= :小於等於 – 返回x是否小於等於y。 (a = b) 返回 true。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/206097.html