標籤:令行 web開發 最小 字元編碼 sci bre 定時 千萬 細節
Python簡介
python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承。大家都知道,當下全棧工程師的概念很火,而Python是一種全棧的開發語言,所以你如果能學好Python,那麼前端,後端,測試,大資料分析,爬蟲,人工智慧,嵌入式,等這些工作你都能勝任。
關於python的哲學:python崇尚 “優雅”、“明確”、“簡單”,舉個簡單的例子,若果同樣的功能你用C/C++寫可能要寫100行代碼,而如果用Python寫你可能只要20行代碼就搞定,同樣的如果一個問題有好幾種解決方案,但是Python會用一種最簡單的方法來實現。所以Python是用最簡單最優雅最明確的方法來解決問題。
下面是最新的TIOBE熱門排行榜,Python趕超C#佔據第四, Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言。
統計地址:https://www.tiobe.com/tiobe-index/
由可見,Python整體呈上升趨勢,反映出Python應用越來越廣泛並且也逐漸得到業內的認可!
目前Python主要應用領域:
- 雲端運算: 雲端運算最火的語言, 典型應用OpenStack
- WEB開發: 眾多優秀的WEB架構,眾多大型網站均為Python開發,Youtube, Dropbox, 豆瓣, 典型WEB架構有Django
- 科學運算、人工智慧: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系統營運: 營運人員必備語言
- 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤其擅長策略回測
- 圖形GUI: PyQT, WxPython,TkInter
Python在一些公司的應用:
- Google:Google App Engine 、code.google.com 、Google earth 、Google爬蟲、Google廣告等項目都在大量使用Python開發
- CIA: 美國中情局網站就是用Python開發的
- NASA: 美國航天局(NASA)大量使用Python進行資料分析和運算
- YouTube:世界上最大的視頻網站YouTube就是用Python開發的
- Dropbox:美國最大的線上雲端儲存網站,全部用Python實現,每天網站處理10億個檔案的上傳和下載
- Instagram:美國最大的圖片分享社交網站,每天超過3千萬張照片被分享,全部用python開發
- Facebook:大量的基礎庫均通過Python實現的
- Redhat: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
- 豆瓣: 公司幾乎所有的業務均是通過Python開發的
python的優缺點:
優點
- Python的定位是“優雅”、“明確”、“簡單”,所以Python程式看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。
- 開發效率非常高,Python有非常強大的第三方庫,基本上你想通過電腦實現任何功能,Python官方庫裡都有相應的模組進行支援,直接下載調用後,在基礎庫的基礎上再進行開發,大大降低開發週期,避免重複造輪子。
- 進階語言————當你用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節
- 可移植性————由於它的開源本質,Python已經被移植在許多平台上。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就幾乎可以在市場上所有的系統平台上運行
- 可擴充性————如果你需要你的一段關鍵代碼運行得更快或者希望某些演算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。
- 可嵌入性————你可以把Python嵌入你的C/C++程式,從而向你的程式使用者提供指令碼功能。
缺點
- 速度慢,Python 的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑於使用Python的主要原因,但其實這裡所指的運行速度慢在大多數情況下使用者是無法直接感知到的,必須藉助測試載入器才能體現出來,比如你用C運一個程式花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是非常誇張了,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數情況下Python已經完全可以滿足你對程式速度的要求,除非你要寫對速度要求極高的搜尋引擎等,這種情況下,當然還是建議你用C去實現的。
- 代碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求原始碼必須是加密的,那你一開始就不應該用Python來去實現。
- 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全域解譯器鎖(Global Interpreter Lock),是電腦程式設計語言解譯器用於同步線程的工具,使得任何時刻僅有一個線程在執行,Python的線程是作業系統的原生線程。在Linux上為pthread,在Windows上為Win thread,完全由作業系統調度線程的執行。一個python解譯器進程內有一條主線程,以及多條使用者程式的執行線程。即使在多核CPU平台上,由於GIL的存在,所以禁止多線程的並存執行。關於這個問題的折衷解決方案,我們在以後線程和進程章節裡再進行詳細探討。
python解譯器的分類:
由於整個Python語言從規範到解譯器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解譯器來執行Python代碼(當然難度很大)。事實上,確實存在多種Python解譯器。
CPython
當我們從Python官方網站下載並安裝好Python 3 後,我們就直接獲得了一個官方版本的解譯器:CPython。這個解譯器是用C語言開發的,所以叫CPython。在命令列下運行python就是啟動CPython解譯器。
CPython是使用最廣的Python解譯器。教程的所有代碼也都在CPython下執行。
IPython
IPython是基於CPython之上的一個互動式解譯器,也就是說,IPython只是在互動方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但核心其實都是調用了IE。
CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。
PyPy
PyPy是另一個Python解譯器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),所以可以顯著提高Python代碼的執行速度。
絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解譯器下執行可能會有不同的結果。如果你的代碼要放到PyPy下執行,就需要瞭解PyPy和CPython的不同點。
Jython
Jython是運行在Java平台上的Python解譯器,可以直接把Python代碼編譯成Java位元組碼執行。
IronPython
IronPython和Jython類似,只不過IronPython是運行在微軟.Net平台上的Python解譯器,可以直接把Python代碼編譯成.Net的位元組碼。
Linux下編譯安裝python:
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgztar -xzvf Python-3.6.5.tgzcd Python-3.6.5/./configure=/usr/local/python3make && make altinstall
一、變數&字元編碼
變數
常量:我們約定俗成都為大寫
1、變數聲明:
- Python將所有資料存為記憶體對象
- Python中,變數事實上是指向記憶體對象的引用
- 動態類型:在任何時刻,只要需要,某個對象引用都可以重新引用一個不同的對象(可以是不同的資料類型)內建函數type()用於返回給定資料項目的資料類型
- "="用於將變數名與記憶體中的某個對象綁定:如果對象實現存在,就直接進行綁定;否則,則由"="建立引用的對象,變數名也是對象存在記憶體,比如:name=‘jerry‘,name這個指標指向jerry,name=‘tom‘的時候,name是指標指向tom,但是jerry仍在記憶體中存放著,只是沒有被變數名指向,到一定時候會被垃圾收集器回收,和java有點像。其中當test=‘jerry‘時,test和name這兩個變數名指向記憶體的地址是一樣的。id(test),id(name),變數名是記憶體引用的標識或符號。
2、變數定義的規則:
- 變數名只能是 字母、數字或底線的任意組合
- 變數名的第一個字元不能是數字
- 以下關鍵字不能聲明為變數名
[‘and‘, ‘as‘, ‘assert‘, ‘break‘, ‘class‘, ‘continue‘, ‘def‘, ‘del‘, ‘elif‘, ‘else‘, ‘except‘, ‘exec‘, ‘finally‘, ‘for‘, ‘from‘, ‘global‘, ‘if‘, ‘import‘, ‘in‘, ‘is‘, ‘lambda‘, ‘not‘, ‘or‘, ‘pass‘, ‘print‘, ‘raise‘,‘return‘, ‘try‘, ‘while‘, ‘with‘, ‘yield‘]
# 通過Import keyword查看
import keyword
print(keyword.kwlist)
3、變數最佳命名方式:
- 使用底線‘_‘作為串連,如 name_variables
- 使用大小寫,稱為駝峰法,如 NameVariables,nameVariables
注意:兩種命名方式不要混用,只要你喜歡的一種即可
4、變數命名慣例:
- 以單一底線開頭的變數名(_x)不會被from module import * 語句匯入
- 以兩個底線開頭但結尾沒有底線的變數名(__x)是類的本地變數
- 前後有雙底線的變數名(__x__)是系統定義的變數名,對python解譯器有特殊意義
- 互動式模式下,變數名"_"用於儲存最後運算式的結果
聲明變數
name = "lyshark"
變數的賦值
name = "lyshark" name2 = nameprint(name,name2) name = "lyshark"
字元編碼
1、ASCII
ASCII(American Standard Code for Information Interchange,美國標準資訊交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多隻能用 8 位來表示(一個位元組),即:2**8 = 256-1,所以,ASCII碼最多隻能表示 255 個符號,python2.x解譯器預設是ASCII編碼。
2、Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在電腦上使用的字元編碼。Unicode 是為瞭解決傳統的字元編碼方案的局限而產生的,它為每種語言中的每個字元設定了統一併且唯一的二進位編碼,規定所有的字元和符號最少由 16 位來表示(2個位元組),即:2 **16 = 65536,註:此處說的的是最少2個位元組,可能更多,比如漢字就需要3個位元組,python3.x解譯器預設是Unicode編碼。
3、UTF-8
是對Unicode編碼的壓縮和最佳化,他不再使用最少使用2個位元組,而是將所有的字元和符號進行動態分類:ASCII碼中的內容用1個位元組儲存、歐洲的字元用2個位元組儲存,漢字用3個位元組儲存...
4、GB2312,Big5
為了處理漢字,程式員設計了用於簡體中文的GB2312和用於繁體中文的big5。
GB2312(1980年)一共收錄了7445個字元,包括6763個漢字和682個其它符號。漢字區的內碼範圍高位元組從B0-F7,低位元組從A1-FE,佔用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
GB2312 支援的漢字太少。1995年的漢字擴充規範GBK1.0收錄了21886個符號,它分為漢字區和圖形符號區。漢字區包括21003個字元。2000年的 GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。現在的PC平台必須支援GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支援GB2312。
從ASCII、GB2312、GBK 到GB18030,這些編碼方法是向下相容的,即同一個字元在這些方案中總是有相同的編碼,後面的標準支援更多的字元。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高位元組的最高位不為0。按照程式員的稱呼,GB2312、GBK到GB18030都屬於雙位元組字元集 (DBCS)。
報錯:ascii碼無法表示中文
#!/usr/bin/env python print ("你好,世界")
改正:應該顯示的告訴python解譯器,用什麼編碼來執行原始碼,即:
#!/usr/bin/env python# -*- coding: utf-8 -*- print ("你好,世界")
《Python營運開發之路》 Python入門