您好!此筆記的文本和代碼以網盤形式分享於文末!
因個人能力有限,錯誤處歡迎大家交流和指正!基礎部分內容簡單,但多且零散!
一、Python的應用方向及其領域概覽(時間倉促,部分舉例錯誤請指正)
序號 | 應用方向 | 舉例 |
1 | 系統編程 | yum apt-get Supervisor等系統工具 |
2 | 軟件開發工具 | Spinnaker產品快速且持續部署雲平臺、等 |
3 | 軟件開發 | zope:Web應用服務器、TKinter 、wxPython、PyQt5功能強大複雜、Kivy移動端跨平臺、DevOps |
4 | 網絡編程 | Twisted高併發、asyncio異步編程、等 |
5 | 網絡爬蟲 | Scrapy、Request、BeautifuSoap、urllib、PySpider、Grab、Cola、等 |
6 | WEB開發 | Django-MTV架構、Tornado異步高併發、flask短小精悍、withdeadlines完全主義高效率、等 |
7 | 人工智能 | PyTorch、TensorFlow、Theano、Apollo、Spark Mllib、Scikit Learn、Gensim、Pylearn2、Nilearn、Pymc、PyBrain、Fuel、Keras、MxNet等 |
8 | 大數據 科學計算 雲計算 金融方向 |
NumPy、SciPy數據處理,Mayavi、 matplotlib、pyecharts數據可視化,pandas、Jupyter Notebook數據分析流,Enthought、librarys模塊、Spark、Dash、PyODPS、OpenStack、CloudStack、Biopython、sunpy、talib、PyQL、pyfin、vollib、QuantPy、Finance-Python、pynance、tia、BigQuant、easytrader等等 |
9 | 系統運維 | psutil、Ipy、dnspython、difflib、pycurl、rrdtool、pyClamad、pexpect、paramiko、fabric、playbook、saltstack等 |
10 | 多媒體 | PIL、Piddle、ReportLab圖像聲音視頻動畫;pyOpenGL三維場景、RTGraph3D等 |
11 | 企業和網站 | odoo、ERP、 CRM、CMDB等 |
12 | 自動化測試 | Selenium、requests、Robot Framework、RedwoodHQ、Jasmine、Pytest、unittest、nose、doctest、mock unittest |
13 | 信息安全 | Network、Paimei、Capstone、Sulley、Requests、Volatulity、pyew、peepdf、Exomind等等 |
14 | 遊戲開發 | Panda3D、PyOgre、RenPy、cocos2d、Pygame、Blender、Soya 3D、KlayGE、遊戲《文明》《戰地2》等 |
15 | 硬件編程 | 樹莓派、MicroPython、PYNQ、pyMagic等 |
16 | 公司與網站 | Instagram圖片視頻分享、YouTube視頻網站、google網絡搜索系統、CIA網站、Irobot商業真空吸塵器、NSA加密和智能分析、IronPor郵件服務器、Infoseek公用搜索引擎、Bittorrent P2P文件分享系統、豆瓣、知乎、果殼、Quora、NASA、Dropbox、春雨醫生、Reddit、EVE、Digg等等 |
二、Python語言發展與特點 | |||||
Python | 於1991年發佈的一種計算機程序設計語言。 | ||||
Python設計哲學 | “EIBTI”:>>import this; 簡單、優雅、明確。 | ||||
優點 | 缺點 | 喏!栗子~_~ | |||
語言分類 | *面向對象 | 定義 | 採用基於對象(實體)的概念建立模型,模擬客觀世界分析、設計、實現軟件的辦法,面向對象方法的基礎實現中也包含面向過程思想; 特性:抽象 封裝 繼承 多態 |
Python、C++、 JAVA、Ruby |
|
1>易維護、易複用、易擴展, 2>有封裝、繼承、多態性的特性,可設計出低耦合的系統,使系統更加靈活、更加易於維護 |
1>性能比面向過程低 | ||||
面向過程 | 定義 | 一種以過程爲中心的編程思想,一種基礎的順序的思維方式 特性:模塊化、流程化 |
C語言 (查後發現彙編語言屬於面向計算機硬件表述) |
||
性能比面向對象高,因爲類調用需實例化,消耗資源開銷大;比如單片機、嵌入式Linux/Unix等一般採用面向過程開發, 性能是最重要的因素 |
相對於面向對象而言不易維護、 不易複用、不易擴展 |
||||
語言種類 | *動態語言 | 定義 | 在運行期間纔去做數據類型檢查的語言、 不用給任何變量指定數據類型 |
Python、Ruby、 Vbscript、Javascript、Object-C、PHP |
|
不需要寫多種數據類型的代碼,代碼相對簡潔、方便閱讀 | 不方便調試 代碼命名也容易混淆 |
||||
靜態語言 | 定義 | 數據類型是在編譯其間檢查的、 寫程序時要聲明所有變量的數據類型 |
C/C++、Java、 Delphi、Go |
||
方便調試,代碼相對規範 | 代碼含很多數據類型,不夠簡潔 | ||||
數據類型 | *強類型 | 定義 | 一旦變量被指定數據類型,若不強制類型轉換,則數據類型永遠不變 | Python、Java、C/C++ | |
類型安全、但是程序可靠, 調試簡單,變量更加規範 |
學習成本大開發效率比較低下,代碼設計必須考慮存儲問題, | ||||
弱類型 | 定義 | 數據類型可被忽略,一個變量可賦不同數據類型的值 | JavaScript 、VBScript、PHP | ||
學習簡單,語言表達簡單易懂, 代碼更優雅,開發週期更短, 更加偏向邏輯設計 |
類型不安全,變量混亂, 運行效率低下 |
||||
轉譯器種類 | 特點 | 在運行程序的時候才逐行解釋翻譯,然後執行的語言 | JavaScript、Python、Erlang、PHP、Perl、Ruby、 java.exe 解釋器 | ||
*解釋器 | 良好的平臺兼容、靈活修改代碼不用停機快速部署 | 每次運行都需解釋 性能偏低 |
|||
特點 | 將源代碼編譯成機器碼,之後才能執行的語言 | C、C++、 Pascal、Object-C、 javac.exe 編譯器 |
|||
編譯器 | 程序執行效率高 可以脫離語言環境獨立運行 |
開發效率低,不能跨平臺; 修改需重新編譯,大工程編譯時間長 |
|||
小結 | Python是動態強數據類型且解釋型執行的面向對象的高級語言 | ||||
python優缺點 | 1>入門簡單,適合閱讀; 2>摒棄指針,語法簡潔, 可複雜編程且開發效率高; 3>開源代碼,可移植性強; 4>可擴展性好,對速度和算法可以部分程序用C/C++編寫; 5>可嵌入性好,可將python嵌入到C/C++程序中,膠水語言特性; 6>強大豐富的庫和第三方庫, 降低開發週期,避免重複造輪子; 7>強制縮進,代碼規範; |
1>運行速度稍慢; 2>代碼不能加密; 3>由於GIL(全局解釋器鎖) 線程不能很好利用多CPU 4>架構或框架選擇太多,是優勢但對初選者不友好; |
人生苦短 我用Python! |
||
Py解釋器 | CPython | 官方版本的解釋器,C語言開發,使用最廣泛;不支持JIT執行速度不如pypy | |||
PyPy | 採用JI技術,實現動態編譯爲機器碼,提高執行速度,無法支持官方API,無法使用大部分第三方庫 | ||||
Jython | 運行在Java平臺的python解釋器,將Python代碼翻譯成JAVA字節碼執行 | ||||
IronPython | 運行在微軟.Net平臺上的Python解釋器,把Python代碼編譯成.Net的字節碼執行 | ||||
Ipython | 基於CPython之上的一個交互式解釋器 | ||||
版本發展 非完全向下兼容 |
2.X | 3.X | |||
print語句:print Hello world! | print函數:print("hello world!") | ||||
輸入函數 | input_raw()、raw_input() | input() | |||
編碼 | 默認編碼ascii:中文需首行添加: #-*- encoding:utf-8 -*- |
默認編碼utf-8 | |||
字符串 | unicode類型表示字符串序列, str類型表示字節序列 |
str類型表示字符串序列, byte類型表示字節序列 |
|||
True和False | Python2 兩個全局變量可更改 | 修正了變量,讓True或False不可變 | |||
nonlocal | 無法在嵌套函數中聲明非全局變量 | 使用nonlocal方法實現 | |||
xrange | 有 | 無,完全range()方法 | |||
long類型 | 有 | 無,僅有int一種整型 | |||
異常 | except exc, var | except exc as var | |||
命名改變 | _winreg | winreg | |||
命名改變 | ConfigParser | configparser | |||
命名改變 | copy_reg | copyreg | |||
命名改變 | Queue | queue | |||
命名改變 | SocketServer | socketserver | |||
命名改變 | repr | reprlib |
三、Python關鍵字和變量命名 | |||||
1、關鍵字概覽 | |||||
1>內置常量關鍵字 | |||||
FALSE | 布爾類型常量, 判斷檢測屬性爲假 |
TRUE | 布爾類型常量, 判斷檢測屬性爲真 |
None | NoneType數據類型特殊的常量,無值 與任何其他的數據類型比較永遠返回False |
__debug__ | 一個bool類型的常量 | Ellipsis | ellipsis類型的常量 它和…是等價的 |
NotImplemented | 是NotImplementedType類型的常量, 可賦值但不應該這樣操作 |
2>邏輯與 或 非 | |||||
not | 邏輯非 | and | 邏輯與 | or | 邏輯或 |
3>判斷 與 循環 | |||||
if | 條件判斷 | elif | 條件判斷,其他情況 | else | 條件判斷的結束 |
for | 與in連用構成循環遍歷 | in | 與from連用構成遍歷 | is | is判斷,常用於id、type、value |
while | 條件判斷-循環語句, 注意條件防止死循環 |
break | 直接跳出整個循環 | continue | 跳出當前循環 |
4>函數 | |||||
def | 用於定義方法 | lambda | 表達式方式定義一個匿名函數,起到函數速寫的作用 | pass | 空語句保證程序結構完整性, 佔位後續再完善 |
return | 函數返回值 | yield | 返回一個生成器(iterable)對象 | ||
5>異常處理 | |||||
try | 異常處理, try存放要執行的語句 |
except | except捕獲異常,與try連用 | finally | 必然執行finally語句的代碼塊 |
raise | 觸發異常,後面代碼不會再執行, 可以主動引發異常 |
assert | 斷言,其返回值爲假,就會觸發異常 | ||
6>導入模塊 包 | |||||
import | 引入外部包 | from | 引用模塊 | ||
7>重命名 | |||||
as | 與with連用 | ||||
8>變量 | |||||
global | 定義全局變量 | nonlocal | 用於標識外部作用域的變量 | ||
9>類 | |||||
class | 聲明類 | ||||
10>刪除 | |||||
del | 刪除變量 | ||||
11>上下文管理 | |||||
with | 與as連用,和異常處理 | ||||
12>python3.7新增 | |||||
async | 聲明函數爲異步函數 | await | 一個協程裏可以啓動另外一個協程,並等待它完成返回結果 | ||
2、變量命名(變量是計算機語言中能儲存計算結果或能表示值的抽象概念,簡言之就是 數據的別名(標識符),方便記憶和使用) | |||||
命名規則 | 列子 | ||||
1>必須由數字,字母,下劃線任意組合,且不能數字開頭; | |||||
2>不能是python中的關鍵字; | 喏,就是上面的哪些關鍵字嘍! | ||||
3>不能是中文,變量名不要太冗長 | |||||
4>永遠不要使用字母‘l’(小寫的L),‘O’(大寫的O),或者‘I’(大寫的i)作爲單字符變量名。 在有些字體裏,這些字符無法和數字0和1區分,如果想用‘l’,用‘L’代替。 |
|||||
5>全局變量名:python中約定俗成常量名字母全大寫,單詞之間用_分割 | COLOR_WRITE | ||||
6>變量名具有可描述性:不要起名爲無意義難以解讀的變量名 | auigfiusdjvkjlsgfu,這就是無意義的命名 | ||||
7>普通變量:小寫字母,單詞之間用_分割 | this_is_a_var | ||||
8>實例變量:以_開頭,其他和普通變量一樣 | _instance_var | ||||
9>私有實例變量:以__開頭(2個下劃線),其他和普通變量一樣 | __private_var | ||||
10>專有變量:__開頭,__結尾,一般爲python的自有變量,不要以這種方式命名 | __class__ | ||||
11>類名: 使用駝峯命名規則,單詞首字母大寫 | ConfigUtil | ||||
12>模塊和包名:簡短全小寫字母,可以使用_下劃線,但不建議使用; C/C++編寫的擴展模塊,需要一個下劃線前綴 |
ad_stats.py 、_socket | ||||
12>普通函數名:函數名應該小寫,想提高可讀性可使用下劃線分割 | get_name() | ||||
13>私有函數(外部訪問會報錯):以__開頭(2個下劃線),其他和普通函數一樣 | __get_name() | ||||
14>常用縮寫:function --> fn、text --> txt、object --> obj 、count --> cnt 、number --> num等 | |||||
15>一個前導下劃線:表示非公有; 一個後綴下劃線:避免關鍵字衝突;兩個前導下劃線:當命名一個類屬性引起名稱衝突時使用。兩個前導和後綴下劃線:“魔”(有特殊用途)對象或者屬性,不要創造這樣的名字,只是使用它們! | |||||
3、註釋規範和其他規範(註釋需簡潔準確,避免冗長無用註釋;註釋是爲方便自己和他人快速閱讀並理解代碼功能使用) | |||||
pycharm可以配置pylint來檢查代碼規範 | 栗子 | ||||
1>塊註釋:塊註釋適用於跟隨它們的某些(或全部)代碼,並縮進到與代碼相同的級別; 塊註釋的每一行開頭使用一個#和一個空格(除非塊註釋內部縮進文本)。 塊註釋內部的段落通過只有一個#的空行分隔 |
|||||
2>行內註釋: #(解釋邏輯爲主)推薦有節制的使用行內註釋; 行內註釋和代碼至少要有兩個空格分隔,註釋由#和一個空格開始。 |
x = x + 1 # Compensate for border | ||||
3>文檔字符串:'''被註釋內容''' """被註釋內容"""(解釋功能爲主); 要爲所有的公共模塊,函數,類以及方法編寫文檔說明; 非公共的方法沒有必要,但應該在def那一行之後描述方法具體作用的註釋 |
|||||
4>與代碼相矛盾的註釋比沒有註釋還糟,當代碼更改時,優先更新對應的註釋! | |||||
5>註釋應該是完整的句子,它的第一個單詞應該大寫,除非它是以小寫字母開頭的標識符 | |||||
6>註釋在句尾結束的時候應該使用兩個空格。 | |||||
7>縮進:每一級縮進使用4個空格。續行應該與其包裹元素對齊,要麼使用圓括號、方括 號和花括號內的隱式行連接來垂直對齊,要麼使用掛行縮進對齊 |
|||||
8>行的最大長度:所有行限制的最大字符數爲79; 沒有結構化限制的大塊文本(文檔字符或者註釋),每行的最大字符數限制在72。 |
|||||
9>空行:頂層函數和類的定義,前後用兩個空行隔開。類裏的方法定義用一個空行隔開。 | |||||
10>Imports 導入: 在分開的行,推薦使用絕對路徑導入;導入順序依次爲:標準庫導入、相關第三方庫導入、本地應用/庫特定導入、應該在每一組導入之間加入空行。 | from subprocess import Popen, PIPE | ||||
11>建議程序編寫結束後加一個回車空行 |
四、Pycharm的快捷鍵與相關配置簡介 | ||||||
1、常用快捷鍵 | ||||||
Ctrl + / | 註釋(取消註釋)選擇的行 | Alt + Shift + C | 快速查看最近對項目的更改 | F8 | 跳過(Debugging) | |
Ctrl + Shift + / | 塊註釋 | Alt + Insert | 自動生成代碼 | F7 | 進入(Debugging) | |
Ctrl + Alt + L | 格式化代碼 | Ctrl + O | 重新方法 | Shift + F8 | 退出(Debugging) | |
Ctrl + Alt + I | 自動縮進行 | Ctrl + Alt + O | 優化導入 | Alt + F9 | 運行遊標(Debugging) | |
Alt + Enter | 優化代碼,提示信息實現自動導包 | Tab / Shift + Tab | 縮進/不縮進當前行 | Alt + F8 | 驗證表達式(Debugging) | |
Ctrl + Shift + F | 高級查找 | Ctrl+V/Shift+Insert | 從剪貼板粘貼 | Ctrl + F8 | 斷點開關(Debugging) | |
Alt + Shift + Q | 更新代碼到遠程服務器 | Ctrl + Shift + V | 從最近的緩衝區粘貼 | Ctrl + Shift + F8 | 查看斷點(Debugging) | |
Ctrl + N | 查找所有的類的名稱 | Alt + Shift + F10 | 運行模式配置(Running) | Ctrl + N | 跳轉到類(Navigation) | |
Ctrl + P | 光標位於方法調用的括號內,彈出一個有效參數列表 | Alt + Shift + F9 | 調試模式配置(Running) | Ctrl + Shift + B | 跳轉到類型聲明(Navigation) | |
Ctrl + Shift + J | 快捷鍵將兩行合併爲一行,並刪除不必要的空格以符合代碼樣式 | Shift + F10 | 運行(Running) | Ctrl + U | 跳轉到父方法、父類(Navigation) | |
Ctrl + Shift + V | 快捷鍵選擇並將最近的剪貼板內容插入到文本中 | Shift + F9 | 調試(Running) | Alt + Up/Down | 跳轉到上一個、下一個方法(Navigation) | |
Shift + F6 | 重命名(Refactoring) | Alt + Delete | 安全刪除(Refactoring) | F2 / Shift + F2 | 下一條、前一條高亮的錯誤(Navigation) | |
待補充 | ||||||
Ctrl+空格 | 代碼提示功能 | Ctrl+F4 | 關閉當前文檔 | |||
3、配置信息簡介 | ||||||
導入和導出配置 | file>export settings、file>import settings | |||||
顯示“行號”與“空白字符” | > Appearance -> 勾選“Show line numbers”、“Show whitespaces”、“Show method separators” | |||||
顏色與字體 | > Colors & Fonts -> Scheme name -> 選擇"monokai"“Darcul | |||||
字體大小 | > Colors & Fonts -> Font -> Size -> 設置爲“14 | |||||
設置縮進符爲製表符“Tab | File -> Default Settings -> Code Style -> General -> 勾選“Use tab character -> Python -> 勾選“Use tab character” |
|||||
去掉默認摺疊 | > Code Folding -> Collapse by default -> 全部去掉勾選 | |||||
文件默認編碼 | File Encodings> IDE Encoding: UTF-8;Project Encoding: UTF-8; | |||||
代碼自動整理設置 | File -> Settings -> appearance | |||||
代碼提示功能 | Main menu -> code -> Completion -> Basic -> 設置爲“Alt+/” Main menu -> code -> Completion -> SmartType -> 設置爲“Alt+Shift+/” |
|||||
待補充 | ||||||
五、python數據類型一 | ||||||
1、計算機基礎知識簡介 | ||||||
CPU | 相當於人的大腦,用於計算 | |||||
內存 | 儲存數據,4G,8G,16G,32G,成本高,斷電數據即消失。 | |||||
硬盤 | 固態硬盤、機械硬盤,儲存數據,應該長久保持數據,重要文件等斷電數據不消失 | |||||
操作系統 | windows、Ubuntu、Centos、Gentoo、FreeBSD、MAC OS | |||||
應用程序 | word、excel、pycharm等等 | |||||
編碼 | 機器碼 | 電腦的傳輸,存儲都是01010101 | ||||
ASCII碼 | 只能表示256種可能,太少 | |||||
萬國碼 unicode | 來解決全球化文字問題32位表示一個字符。 | |||||
Unicode 升級 | utf-8 | 最少用一個字節,8位表示一個英文或字符即一個字節表示一個字符 | ||||
歐洲文字用16位去表示 兩個字節 表示一個字符 | ||||||
中文用24 位去表示 三個字節 表示一個字符 | ||||||
utf-16 | 一個字符最少用16位去表示 | |||||
utf-32 | 一個字符最少用32位去表示 | |||||
gbk | 中國發明的,一箇中文用兩個字節 16位去表示,只能用於中文和ascii碼中的文字,英文字母1個字節 | |||||
python3中 32位 4個字節 表示1個字符 | ||||||
單位換算 | ||||||
1bit 8bit = 1bytes | 8位 = 1字節bytes | |||||
1byte 1024byte = 1KB | ||||||
1KB 1024kb = 1MB | ||||||
1MB 1024MB = 1GB | ||||||
1GB 1024GB = 1TB | ||||||
進制轉換 | 不詳細描述(略) | |||||
二進制 | 八進制 | 十六進制 | ||||
十進制 | ||||||
二進制 | ||||||
八進制 | ||||||
十六進制 | ||||||
2、Python的數據類型 | ||||||
先介紹幾個概念 | ||||||
<1 | 不可變數據類型 | 當該數據類型的對應變量的值發生了改變,那麼它對應的內存地址也發生改變 | ||||
<2 | 可變數據類型 | 當該數據類型的對應變量的值發生了改變,那麼它對應的內存地址不發生改變 | ||||
<3 | 不可哈希 | 改變值的同時卻沒有改變id,無法由地址定位值的唯一性,因而不可哈希 | ||||
<4 | 可哈希 | 一個對象能稱爲 hashable ,必須有個 hash 值,這個值在整個生命週期都不會變化,而且必須可以進行相等比較 | ||||
數據類型 | ID測試 | 屬性 | ||||
1>整型 | int 數字 (64系統) -2**63~2**63-1 |
同值同址, 不同值不同址 |
不可變 可哈希 |
|||
2>布爾型 | bool,用於判斷 真 1 True 假 0 False |
同值同址, 不同值不同址 |
不可變 可哈希 |
|||
3>字符串 | str 字符集合 ‘’ 引號引起來的數據 |
同值同址, 不同值不同址 |
不可變 可哈希 |
|||
4>列表 | list 容器 [ ] 承載多種數據類型 l1 = [2, 0, '567'] |
同值不同址, 不同值同址 |
可變 不可哈希 |
|||
5>元組 | tuple 重要數據容器 () 不能增刪改的容器 tu1 = ( 'a', '何', 3, “5”) |
元組因爲是不可修改的 | 不可變 可哈希 |
|||
6>字典 | dict 容器 { } 易查詢有數據關聯 person = {"name": "mr.wu", 'age': 18} |
同值不同址, 不同值同址 |
可變 不可哈希 |
|||
7>集合 | set 數據集合 { } 無序的且不重複 set1 = {1,2,'harald',} |
集合數據發生改變 但是內存地址沒有改變 |
可變 不可哈希 |
|||
8>frozenset | forzenset() 函數 返回一個凍結的集合 frozenset([,5, 6, 7, 8, 9]) |
frozenset() 返回一個凍結的集合,凍結後集合不能再添加或刪除任何元素。 | 不可變 可哈希 |
六、Python流程控制語句基礎 | |||
1、順序結構:即代碼從上到下的執行順序來執行 | |||
2、分支結構:代碼執行到某位置而進行判斷,來決定繼續執行的方向 | |||
if語句 | 形式 | 簡單栗子 | |
條件式判斷 if 形式 |
if 表達式: 語句塊 |
if a>0: print("正數") |
|
非此即彼式選擇 if-else形式 |
if 表達式: 語句塊1 else: 語句塊2 |
if a>0: print("正數") else: print("負數") |
|
elif個數不限制 if-elif-else形式 |
if 表達式1: 語句塊1 elif: 語句塊2 ... else: 語句塊n |
if a>0: print("正數") elif a == 0: print("零") else: print("負數") |
|
3、循環結構 | |||
形式 | 舉例 | ||
whlie循環 | while 條件式 | while 循環條件: 循環體 |
while i <= 100: num += i i += 1 |
for循環 | for遍歷式 | for x in y: 循環體 |
for i in range(10): print(i) |
4、break、pass、continue語句 | |||
break | 用於跳出最近的一級 for 或 while 循環 | ||
continue | 表示循環繼續執行下一次迭代 | ||
pass | 語句什麼也不做,可以作爲控制體佔位符 |
願有更多的朋友,在網頁筆記結構上分享更邏輯和易讀的形式:
鏈接:https://pan.baidu.com/s/1PaFbYL1sYoUcRj0xgm8W8Q
提取碼:(暫緩)