- 1、python面試題總結1-內存管理機制
- 2、如何學習Python總結之談
- 3、Python 異常處理總結
- 4、你見過的最全面的Python重點知識總結
- 5、【Python】基礎總結
(1).引用計數
(2). 垃圾回收
(3). 內存池機制
在python中每創建一個對象,對應的會有一個引用計數,當發生賦值操作如a=b,對應的b的引用計數會自動加1,當引用的對象被清除或者函數結束時,引用計數會自動減1。
在python中使用引用計數,標記清楚,分代回收三種方式進行垃圾回收。
其中,引用計數當對象的引用計數歸0時,對象會自動被清除。標記清除機制是首先遍歷所有對象,如果對象可達,就說明有變數引用它,則標記其為可達的。如果不可達,則對其進行清除。分代回收是當對象創建時被標記為第0代,經過一次垃圾回收之後,餘下的對象被標記為第1代,最高為第2代。其原理是,對象的生存期越長,月可能不是垃越。
ython語言雖然提供了對內存的垃圾收集機制,但實際上它將不用的內存放到內存池而不是返回給操作系統,所以就有了以下:
1 Pymalloc機制;這個主要是為了加速Python的執行效率,Python引入了一個內存池機制,用於管理,為了對小塊內存的申請和釋放。
2 Python中所有小於256個位元組的對象都是依靠pymalloc分配器來實現的,而稍大的對象用的則是系統的malloc。
3 對於Python對象,比如整數、浮點數和List這些,都有自己獨立的內存池,對象間並不共享他們的內存池。換句話說就是,假設你分配並且釋放了大量的整數,那麼用於緩存這些整數的內存就不能再分配給浮點數。
學習python主要是自學或者報班學習的方式,但不建議自學。
如果想通過學習python改行,那就需要明確一下自己的方向。因為python編程有很多方向,有網路爬蟲、數據分析、Web開發、測試開發、運維開發、機器學習、人工智慧、量化交易等等,各個方向都有特定的技能要求。
想學的話,當然是可以學習的。python是一門語法優美的編程語言,不僅可以作為小工具使用提升我們日常工作效率,也可以單獨作為一項高新就業技能!
python可以做的事情:
軟體開發:用python做軟體是很多人正在從事的工作,不管是B/S軟體,還是C/S軟體,都能做。並且需求量還是挺大的;
數據挖掘:python可以製作出色的爬蟲工具來進行數據挖掘,而在很多的網路公司中數據挖掘的崗位也不少;
遊戲開發:python擴展性很好,擁有遊戲開發的庫,而且遊戲開發絕對是暴力職業;
大數據分析:如今是大數據的時代,用python做大數據也是可以的,大數據分析工程師也是炙手可熱的職位;
全棧工程師:如今程序員都在向著全棧的方向發展,而學習python更具備這方面的優勢;
系統運維:python在很多linux中都支持,而且語法特點很向shell腳本,學完python做個系統運維也是很不錯的。
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
請點擊輸入圖片描述
什麼是異常?
異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。一般情況下,在Python無法正常處理程序時就會發生一個異常。
異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。
python提供了兩個非常重要的功能來處理python程序在運行中出現的異常和錯誤。你可以使用該功能來調試python程序。
異常處理: 本站Python教程會具體介紹。
斷言(Assertions):本站Python教程會具體介紹。
異常處理
捕捉異常可以使用try/except語句。try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。如果你不想在異常發生時結束你的程序,只需在try里捕獲它。
語法:
以下為簡單的try….except…else的語法:
try的工作原理是,當開始一個try語句後,python就在當前程序的上下文中作標記,這樣當異常出現時就可以回到這裡,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。
· 如果當try後的語句執行時發生異常,python就跳回到try並執行第一個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發新的異常)。
· 如果在try後的語句里發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結束程序,並列印預設的出錯信息)。
· 如果在try子句執行時沒有發生異常,python將執行else語句後的語句(如果有else的話),然後控制流通過整個try語句。
實例
下面是簡單的例子,它打開一個文件,在該文件中的內容寫入內容,且並未發生異常:
以上程序輸出結果:
實例
下面是簡單的例子,它打開一個文件,在該文件中的內容寫入內容,但文件沒有寫入許可權,發生了異常:
以上程序輸出結果:
使用except而不帶任何異常類型
你可以不帶任何異常類型使用except,如下實例:
以上方式try-except語句捕獲所有發生的異常。但這不是一個很好的方式,我們不能通過該程序識別出具體的異常信息。因為它捕獲所有的異常。
使用except而帶多種異常類型
你也可以使用相同的except語句來處理多個異常信息,如下所示:
try-finally 語句
try-finally 語句無論是否發生異常都將執行最後的代碼。
實例
如果打開的文件沒有可寫許可權,輸出如下所示:
同樣的例子也可以寫成如下方式:
當在try塊中拋出一個異常,立即執行finally塊代碼。finally塊中的所有語句執行後,異常被再次提出,並執行except塊代碼。參數的內容不同於異常。
異常的參數
一個異常可以帶上參數,可作為輸出的異常信息參數。你可以通過except語句來捕獲異常的參數,如下所示:
變數接收的異常值通常包含在異常的語句中。在元組的表單中變數可以接收一個或者多個值。
元組通常包含錯誤字元串,錯誤數字,錯誤位置。
實例
以下為單個異常的實例:
以上程序執行結果如下:
觸發異常
我們可以使用raise語句自己觸發異常
raise語法格式如下:
語句中Exception是異常的類型(例如,NameError)參數是一個異常參數值。該參數是可選的,如果不提供,異常的參數是」None」。
最後一個參數是可選的(在實踐中很少使用),如果存在,是跟蹤異常對象。
實例
一個異常可以是一個字元串,類或對象。 Python的內核提供的異常,大多數都是實例化的類,這是一個類的實例的參數。
定義一個異常非常簡單,如下所示:
注意:為了能夠捕獲異常,」except」語句必須有用相同的異常來拋出類對象或者字元串。
例如我們捕獲以上異常,」except」語句如下所示:
用戶自定義異常
通過創建一個新的異常類,程序可以命名它們自己的異常。異常應該是典型的繼承自Exception類,通過直接或間接的方式。
以下為與RuntimeError相關的實例,實例中創建了一個類,基類為RuntimeError,用於在異常觸發時輸出更多的信息。
在try語句塊中,用戶自定義的異常後執行except塊語句,變數 e 是用於創建Networkerror類的實例。
在你定義以上類後,你可以觸發該異常,如下所示:
來源 | 腳本之家 原文鏈接:
由於總結了太多的東西,所以篇幅有點長,這也是作者”縫縫補補”總結了好久的東西,強烈建議收藏再慢慢看~
不要在 where 子句中的 「=」 左邊進行函數、算術運算或其他表達式運算,否則系統將可能無法正確使用索引
應盡量避免在 where 子句中對欄位進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描
不適合鍵值較少的列(重複數據較多的列)比如:set enum列就不適合(枚舉類型(enum)可以添加null,並且默認的值會自動過濾空格集合(set)和枚舉類似,但只可以添加64個值)
如果MySQL估計使用全表掃描要比使用索引快,則不使用索引
單例模式
工廠模式
構造模式
python實現各種數據結構
快速排序
選擇排序
插入排序
歸併排序
堆排序heapq模塊
棧
隊列
二分查找
input(“提示性信息”)
如:
input(“請輸入數字”)
因為 Python 沒有特別人為規定數據類型,數據類型是由計算機進行判定,所以我們 input() 輸入的數據均默認作為字元串處理,而如果要輸入一些數字,著需要 eval() 評估函數對字元串進行評估,化為語句(數字)。
print(…)
默認空一行,如果想不空行,則
print(…., end = “”)
特性:
進位:
特性:
浮點數間運算存在不確定尾數,不是 bug
如:0.1+0.3 → 0.4
0.1+0.2 → 0.30000000000000004
這是由於在計算機中一切數據都是化為二進位進行存儲的,而有的浮點數並不能完全化為相等的二進位數,只能無限趨近於二進位數。
如:0.1 →
解決方法:
四捨五入:
例如:z = 1.23e-4 + 5.6e+89j
z.real 獲得實部,z.imag 獲得虛部
三種類型存在一種逐漸「擴展」或「變寬」的關係:
整數 → 浮點數 → 複數
特點:
字元串有 2 類共 4 種表示方法:
擴展:
使用[]獲取字元串中一個或多個字元
使用[M:N:K]根據步長對字元串切片
{參數序號:格式控制標記}
右對齊
^ 居中對齊 | 槽設定的輸出寬度 | 數字的千位分隔符 | 浮點數小數精度 或 字元串最大輸出長度 | 整數類型
b , c , d , o , x , X
浮點數類型
e , E , f , % |
填充、對齊、寬度這三個一組,例如:
“{0:=^20}”.format(“PYTHON”)
→ ‘=======PYTHON=======’
“{0:*20}”.format(“BIT”)
→ ‘*****************BIT’
“{:10}”.format(“BIT”)
‘BIT ‘
剩下的三個一組,例如:
“{0:,.2f}”.format(12345.6789)
→ ‘12,345.68’
“{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}x”.format(425)
→ ‘110101001,Σ,425,651,1a9,1A9’
“{0:e},{0:E},{0:f},{0:%}”.format(3.14)
‘3.140000e+00,3.140000E+00,3.140000,314.000000%’
↓CloseCode↓
使用 raise 語句拋出一個指定的異常。
raise [Exception [, args [, traceback]]]
緊湊形式:適用於簡單表達式的二分支結構
表達式1 if 條件 else 表達式2
例如:
↓CloseCode↓
↓CloseCode↓
↓CloseCode↓
↓CloseCode↓
例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
↓CloseCode↓
例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
↓CloseCode↓
例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
↓CloseCode↓
例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
↓CloseCode↓
例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
由條件控制的循環運行方式
↓CloseCode↓
例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
↓CloseCode↓
↓CloseCode↓
例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
↓CloseCode↓
可選參數例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
可變參數例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
在函數定義中,經常會碰到 *args(arguments) 和作為參數 **kwargs(keyword arguments)。
(事實上在函數中,和才是必要的,args 和 kwargs 可以用其他名稱代替)
*args 是指不定數量的非鍵值對參數。
**kwargs 是指不定數量的鍵值對參數。
*args 作為作為元組匹配沒有指定參數名的參數。而 **kwargs 作為字典,匹配指定了參數名的參數。
*args 必須位於 **kwargs 之前。
args( 通常緊跟一個標識符,你會看到a或者args都是標識符)是python用於接收或者傳遞任意基於位置的參數的語法。當你接收到一個用這種語法描敘參數時(比如你在函數def語句中對函數簽名使用了星號語法),python會將此標識符綁定到一個元祖,該元祖包含了所有基於位置的隱士的接收到的參數。當你用這種語法傳遞參數時,標識符可以被綁定到任何可迭代對象(事實上,它也可以是人和表達式,並不必須是一個標識符),只要這個表達式的結果是一個可迭代的對象就行。
**kwds(標識符可以是任意的,通常k或者kwds表示)是python用於接收或者傳遞任意基於位置的參數的語法。(python有時候會將命名參數稱為關鍵字參數,他們其實並不是關鍵字–只是用他們來給關鍵字命名,比如pass,for或者yield,還有很多,不幸的是,這種讓人疑惑的術語目前仍是這門語言極其文化根深蒂固的一個組成部分。)當你接收到用這種語法描敘的一個參數時(比如你在函數的def語句中對函數簽名使用了雙星號語法)python會將標識符綁定到一個字典,該字典包含了所有接收到的隱士的命名參數。當你用這種語法傳遞參數時,標識符只能被綁定到字典(我ID號I它也可以是表達式,不一定是一個標識符,只要這個表達式的結果是一個字典即可)。
當你在定義或調用一個函數的時候,必須確保a和k在其他所有參數之後。如果這兩者同時出現,要將k放在a之後。
lambda函數返回函數名作為結果
↓CloseCode↓
例如:
↓CloseCode↓
運行結果:
↓CloseCode↓
謹慎使用lambda函數
原創文章,作者:0WUES,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126818.html