python的第一篇文章
python是什麼程式語言
編譯型
優點:編譯器一般會有預編譯的過程對程式碼進行優化。因為編譯只做一次,執行時不需要編譯,所以編譯型語言的程式執行效率高。可以脫離語言環境獨立執行。
缺點:編譯之後如果需要修改就需要整個模組重新編譯。編譯的時候根據對應的執行環境生成機器碼,不同的作業系統之間移植就會有問題,需要根據執行的作業系統環境編譯不同的可執行檔案。
解釋型
優點:有良好的平臺相容性,在任何環境中都可以執行,前提是安裝瞭解釋器(虛擬機器)。靈活,修改程式碼的時候直接修改就可以,可以快速部署,不用停機維護。
缺點:每次執行的時候都要解釋一遍,效能上不如編譯型語言。
python就是典型的解釋型語言
動態語言和靜態語言
通常我們所說的動態語言、靜態語言是指動態型別語言和靜態型別語言。
(1)動態型別語言:動態型別語言是指在執行期間才去做資料型別檢查的語言,也就是說,在用動態型別的語言程式設計時,永遠也不用給任何變數指定資料型別,該語言會在你第一次賦值給變數時,
在內部將資料型別記錄下來。Python和Ruby就是一種典型的動態型別語言,其他的各種指令碼語言如VBScript也多少屬於動態型別語言。
(2)靜態型別語言:靜態型別語言與動態型別語言剛好相反,它的資料型別是在編譯其間檢查的,也就是說在寫程式時要宣告所有變數的資料型別,C/C++是靜態型別語言的典型代表,
其他的靜態型別語言還有C#、JAVA等。
強型別定義語言和弱型別定義語言
(1)強型別定義語言:強制資料型別定義的語言。也就是說,一旦一個變數被指定了某個資料型別,如果不經過強制轉換,那麼它就永遠是這個資料型別了。
舉個例子:如果你定義了一個整型變數a,那麼程式根本不可能將a當作字串型別處理。強型別定義語言是型別安全的語言。
(2)弱型別定義語言:資料型別可以被忽略的語言。它與強型別定義語言相反, 一個變數可以賦不同資料型別的值。
強型別定義語言在速度上可能略遜色於弱型別定義語言,但是強型別定義語言帶來的嚴謹效能夠有效的避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否型別安全”之間是完全沒有聯絡的!
例如:Python是動態語言,是強型別定義語言(型別安全的語言); VBScript是動態語言,是弱型別定義語言(型別不安全的語言); JAVA是靜態語言,是強型別定義語言(型別安全的語言)。
通過上面這些介紹,我們可以得出,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程式碼的以.py
為副檔名的文字檔案。要執行程式碼,就需要Python直譯器去執行.py
檔案。
由於整個Python語言從規範到直譯器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python直譯器來執行Python程式碼(當然難度很大)。事實上,確實存在多種Python直譯器。
python的種類
- Cpython
Python的官方版本,使用C語言實現,使用最為廣泛,CPython實現會將原始檔(py檔案)轉換成位元組碼檔案(pyc檔案),然後執行在Python虛擬機器上。
- Jyhton
Python的Java實現,Jython會將Python程式碼動態編譯成Java位元組碼,然後在JVM上執行。
- IronPython
Python的C#實現,IronPython將Python程式碼編譯成C#位元組碼,然後在CLR上執行。(與Jython類似)
- PyPy(特殊)
Python實現的Python,將Python的位元組碼位元組碼再編譯成機器碼。
python世界
首先從'hello world'開始
python2寫法: print 'hello world' python3寫法: print('hello world')
變數
name="喬二狗"
name就是變數
變數的作用:暱稱其代指記憶體裡某個地址中儲存的內容,暫時儲存的工具。
變數定義的規則:
- 變數名只能是 字母、數字或下劃線的任意組合
- 變數名的第一個字元不能是數字
- 以下關鍵字不能宣告為變數名
- ['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']
- 變數名建議不使用拼音和中文
- 變數的要具有意義
- 變數名不要過長
- 變數名要區分大小寫
- 變數名推薦寫法:
- 駝峰體 Qgou
- 下劃線 q_Gou
註釋
單行註釋:
# dhjadhadadjlajdkasd
多行註釋:
"""
ajd
asd ad
kas da da
"""
基礎資料型別(int,str,bool)
int 整型,1,2,3,5,9,55 都是整型
str字串,只要是用引號引起來就是字串
bool布林型, True 真 , False 假
使用者互動
input()
得到的都是字串
if語句
if...
if...else...
if...elif...else...
if...:
if ...(條件): ...(做點兒什麼) ...(做點兒什麼)
...(if語句的外部命令)
if...else...:
if...(條件):
...(做點兒什麼)
...(做點兒什麼)
else:
...(乾點兒別的)
...(乾點兒別的)
if...elif...else...:
if...(條件1):
...(做點兒什麼)
elif...(條件2):
...(做點兒其他的)
elif...(條件3):
...(做點兒其他的)
else(其他): ...(乾點兒別的)