[003]python數據類型一__python_全棧基礎

您好!此筆記的文本和代碼以網盤形式分享於文末!

因個人能力有限,錯誤處歡迎大家交流和指正!基礎部分內容簡單,但多且零散!                                       

                                           一、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 大數據
科學計算
雲計算
金融方向
NumPySciPy數據處理,Mayavi matplotlibpyecharts數據可視化,pandasJupyter Notebook數據分析流,Enthoughtlibrarys模塊、SparkDashPyODPSOpenStackCloudStack、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語句:print Hello world! print函數:print("hello world!")  
輸入函數 input_raw()、raw_input() input()  
編碼 默認編碼ascii:中文需首行添加:
#-*- encoding:utf-8 -*-
默認編碼utf-8  
字符串 unicode類型表示字符串序列,
str類型表示字節序列
str類型表示字符串序列,
byte類型表示字節序列
 
TrueFalse 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 
提取碼:(暫緩)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章