Python 學習之路 目錄介紹 一、Python 介紹 python的創始人是吉多·範羅蘇姆.Python於1989年的聖誕節期間誕生. 二、Python 的主要應用領域 雲計算:OpenStack是python語言開發的 web開發:典型web框架有Django 科學運算\人工智慧:典型庫Num ...
Python 學習之路
目錄介紹
- python 介紹
- python 應用領域
- python 優缺點
- python 解釋器
- python 發展史
- python 安裝
- python 程式編寫Hello word
- python 變數
- python 用戶輸入
- python 數據類型
- python 數據運算
- python 表達式(if..elif..else)
- python 表達式(while)
- python 表達式(for)
一、Python 介紹
python的創始人是吉多·範羅蘇姆.Python於1989年的聖誕節期間誕生.
二、Python 的主要應用領域
- 雲計算:OpenStack是python語言開發的
- web開發:典型web框架有Django
- 科學運算\人工智慧:典型庫NumPy,SciPy,Matplotlib,Enthought Librarys,pandas
- 系統運維:運維人員必備
- 金融:
- 圖形GUI:PyQT,WxPython,TkInter
2.1 python 是怎樣的一門語言:
編程語言主要按以下幾個角度進行分類。編譯器和解釋器、靜態語言和動態語言、強類型語言和弱類型語言。以下進行解釋:
編譯器和解釋器的區別:
編譯器:把源程式的每一條語句都編譯成機器語言,並保存成二進位文件,這樣運行時電腦可以直接以機器語言來運行此程式,速度很快;
解釋器:在執行程式時,才一條一條的解釋成機器語言給電腦來執行,所以運行速度是不如編譯後的程式運行的快的.這是因為電腦不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進位的形式)
編譯型:它和彙編語言是一樣的,也是有一個負責翻譯的程式來對我們的源代碼進行轉換,生成相對應的可執行代碼。這個過程說得專業一點,就稱為編 譯(Compile),而負責編譯的程式自然就稱為編譯器(Compiler)
解釋型:一次把所有的代碼轉換成機器語言,然後寫成可執行文件。(假如你打算閱讀一本外文書,而你不知道這門外語,那麼你可以找一名翻譯,給他 足夠的時間讓他從頭到尾把整本書翻譯好,然後把書的母語版交給你閱讀;或者,你也立刻讓這名翻譯輔助你閱讀,讓他一句一句給你翻譯,如果你想往回看某個章節,他也得重新給你翻譯。)
靜態語言和動態語言的區別:
靜態語言:動態類型語言是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變數指定數據類型,該 語言會在你第一次賦值給變數時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬於動態類型語言。
動態語言:靜態類型語言與動態類型語言剛好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程式時要聲明所有變數的數據類型,C/C++是靜態 類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。
強類型語言:強制數據類型定義的語言。也就是說,一旦一個變數被指定了某個數據類型,如果不經過強制轉換,那麼它就永遠是這個數據類型了。如果 你定義了一個整型變數a,那麼程式根本不可能將a當作字元串類型處理。強類型定義語言是類型安全的語言
弱類型語言:數據類型可以被忽略的語言。它與強類型定義語言相反, 一個變數可以賦不同數據類型的值
三、Python的優缺點
優點:
- python程式簡單明瞭,易懂。如果深入下去,以後可以編寫很複雜的程式。
- 開發效率高。Python有非常強大的第三方庫,基本上你想通過電腦實現任何功能,Python官方庫里都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大降低開發周期,避免重覆造輪子。
- 高級語言—用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節
- 可移植性—由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就幾乎可以在市場上所有的系統平臺上運行。
- 可擴展性—如果你需要你的一段關鍵代碼運行得更快或者希望某些演算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。
- 可嵌入性—你可以把Python嵌入你的C/C++程式,從而向你的程式用戶提供腳本功能。
缺點:
- 速度慢
- 代碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求源代碼必須是加密的,那你一開始就不應該用Python來去實現。
- 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是電腦程式設計語言解釋器用於同步線程的工具,使得任何時刻僅有一個線程在執行,Python的線程是操作系統的原生線程.(該問題有折中解決辦法)
四、Python 解釋器
當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py
為擴展名的文本文件。要運行代碼,就需要Python解釋器去執行.py
文件。由於整個Python語言從規範到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python代碼(當然難度很大)。事實上,確實存在多種Python解釋器。
CPython
當我們從Python官方網站下載並安裝好Python 2.7後,我們就直接獲得了一個官方版本的解釋器: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的位元組碼。
小結:
Python的解釋器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是通過網路調用來交互,確保各程式之間的獨立性。
五、Python 發展史
- 1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
- 1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠調用C語言的庫文件。從一齣生,Python已經具有了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊為基礎的拓展系統。
- Granddaddy of Python web frameworks, Zope 1 was released in 1999
- Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
- Python 2.0 - October 16, 2000,加入了記憶體回收機制,構成了現在Python語言框架的基礎
- Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
- Python 2.5 - September 19, 2006
- Python 2.6 - October 1, 2008
- Python 2.7 - July 3, 2010
- In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
- Python 3.0 - December 3, 2008
- Python 3.1 - June 27, 2009
- Python 3.2 - February 20, 2011
- Python 3.3 - September 29, 2012
- Python 3.4 - March 16, 2014
- Python 3.5 - September 13, 2015
六、Python 安裝
windows
1.下載安裝包 https://www.python.org/downloads 2.安裝 預設安裝路徑:C:\python30 3.配置環境變數 右擊我的電腦-->屬性-->高級系統設置-->環境變數-->在系統變數中找到Path,點擊編輯在最後加上;C:\python30(此處需要註意;號).然後保存即可
Linux、Mac
1.無需安裝,自帶python ps:如果是python2.6 請升級到2.7
七、編寫程式Hello word
Linux
1 #/usr/bin/env python 2 3 print "Hello world"Python
1 #/bin/bash 2 3 echo "Hello world"Shell
1 public class A_test_python { 2 #程式入口 3 public static void main (String[] args){ 4 5 #變數. JAVA中設置變數時需要說明變數類型,此處這是的字元變數 6 String name = "Yhl"; 7 8 #列印出賦予變數得值是多少 9 System.out.println(name); 10 } 11 }JAVA
八、變數
變數定義規則:
變數名只能是:字母、數字或下劃線的任意組合.變數名的第一個字元不能是數字 以下關鍵字不能聲明為變數名 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
註釋:
當行註視:# 被註釋內容 多行註釋:""" 被註釋內容 """ 或 '''被註釋內容'''
1 #_*_coding:utf-8_*_ 2 #聲明變數 3 name = "Honglin.yu" 4 5 #數據賦值給變數的值 6 print(name)Python
1 #/bin/bash 2 3 #給變數name賦值 4 name="welcome to your beijing" 5 6 #列印出變數name的值 7 echo $nameShell
1 public class A_3_1 { 2 #程式入口 3 public static void main (String[] args){ 4 5 #設置變數name.JAVA中在設置變數時需要說明變數類型(此處設置的是字元變數) 6 String name = "Yhl"; 7 8 #列印出變數的值 9 System.out.println("name"); 10 } 11 }JAVA
九、用戶輸入
1 #用戶前臺輸入並賦值給變數name 2 name = input("What's your name?") 3 4 #列印出前臺輸入的信息 5 print (" Welcome to " + name + " BJ ")Python
1 #/bin/bash 2 3 #用戶前臺輸入 4 read -p "what's your name" Uo 5 6 #給變數name賦值 7 name="welcome to beijing" 8 9 #列印出前臺輸入的信息和變數的信息 10 echo $Uo$nameShell
1 #調用類方法Scanner 2 import java.util.Scanner; 3 4 #程式入口 5 public class A_test_python{ 6 7 public static void main (String[] args){ 8 #使用類方法 9 Scanner in = new Scanner(System.in); 10 11 #給變數aa設置值 12 String aa = "請輸入您的年齡:"; 13 14 #列印出變數aa 15 System.out.print(aa); 16 17 #提示前臺輸入 18 String name = in.next(); 19 20 #列印出前臺輸入的信息 21 System.out.println("您的年齡是:"+name+"歲"); 22 } 23 }JAVA
十、數據類型
什麼是運算符?
本章節主要說明Python的運算符。舉個簡單的例子 4 +5 = 9 。 例子中,4 和 5 被稱為操作數,"+" 稱為運算符。
Python語言支持以下類型的運算符:
- 算術元算符
- 比較(關係)運算符
- 賦值運算符
- 邏輯運算符
- 位運算符
- 成員運算符
- 身份運算符
- 運算符優先順序
算術運算符
運算符 | 描述 | 實例 |
+ | 加 - 兩個對象相加 | a + b 輸出結果 30 |
- | 減 - 得到負數或是一個數減去另外一個數 | a - b 輸出結果 -10 |
* | 乘 - 兩個數相乘或是返回一個被重覆若幹次的字元串 | a * b 輸出結果 200 |
/ | 除 - a除以b | a / b 輸出結果 0.5 |
% | 取模 - 返回除法的餘數 | a / b 輸出結果 10 |
** | 冪 - 返回a的b次冪 | a**b 輸出結果 100000000000000000000 |
// | 取整除 - 返回商的整數部分 | c // d 輸出結果 3 (c=10 d=3) |
實例如下:
a = 10 b = 20 touch = a + b print("touch:",touch) touch1 = a - b print("touch1:",touch1) touch2 = a * b print("touch2:",touch2) touch3 = a / b print("touch3:",touch3) touch4 = a // b print("touch4:",touch4) touch5 = a ** b print("touch5:",touch5) c = 10 d = 3 touch6 = c // d print("touch6:",touch6)
比較運算符
假設設置變數a=10,變數b=20
運算符 | 描述 | 實例 |
== | 等於 - 比較對象是否相等 | (a == b) 返回False |
!= | 不等於 - 比較兩個對象是否不相等 | (a != b) 返回true |
<> | 不等於 - 比較兩個對象是否不相等 | (a <> b) 返回true.這個運算符類似!= |
> | 大於 - 返回x是否大於y | (a > b) 返回False |
< |
小於 - 返回x是否小於y.返回1表示真,返回0表示假.與特殊變數true 和False等價(註意大小寫) |
(a < b) 返回true |
>= | 大於等於 - 返回x是否大於等於y | (a >= b) 返回False |
<= | 小於等於 - 返回x是否小於等於y | (a <= b) 返回true |
賦值運算符
運算符 | 描述 | 實例 |
= | 簡單的賦值運算符 | c = a +b 將a + b 的運算結果賦值為c |
+= | 加法賦值運算符 | c += a 等效於 c = c + a |
-= | 減法賦值運算符 | c -= a 等效於 c = c - a |
*= | 乘法賦值運算符 | c *= a 等效於 c = c * a |
/= | 除法賦值運算符 | c /= a 等效於 c = c / a |
%= | 取模賦值運算符 | c %= a 等效於 c = c % a |
**= | 冪賦值運算符 | c **= a 等效於 c = c ** a |
//= | 取整除賦值運算符 | c //= a 等效於 c = c // a |
實例如下:
a = 10 b = 20 c = a + b print("C的值等於:",c) c += a print("C的值等於:",c) c -= a print("C的值等於:",c) c *= a print("C的值等於:",c) c /= a print("C的值等於:",c) c %= a print("C的值等於:",c) c **= a print("C的值等於:",c) c //= a print("C的值等於:",c)
位運算符
假設設置變數a=60,變數b=13
運算符 | 描述 | 實例 |
& |
按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該 位的結果為1,否則為0 |
(a & b)輸出結果12,二進位解釋:0000 1100 |
| | 按位或運算符:只要對應的二個二進位有一個為1時,結果位是1 | (a | b)輸出結果61,二進位解釋:0011 1101 |
^ |
按位異或運算符:當兩對應的二進位位取反,即把1變為0,把0變 為1 |
(a ^ b)輸出結果49,二進位解釋:0011 0001 |
~ |
按位取反運算符:對數據的每個二進位取反,即把1變為0,把0變 為1 |
(~a )輸出結果-61,二進位解釋:1100 0011. 在一個有符號二進位數的補碼形式 |
<< |
左移動運算符:運算符的各二進位全部左移若幹位,由"<<"右邊 的數指定移動的位數,高位丟棄,低位補0 |
a << 2 輸出結果240,二進位解釋1111 0000 |
>> |
右移動運算符:把">>"左邊的運算數各二進位全部右移若幹位 ,">>"右邊的數指定移動的位數 |
a >> 2 輸出結果15,二進位解釋:0000 1111 |
邏輯運算符
假設設置變數a=10,變數b=20
運算符 | 邏輯表達式 | 描述 | 實例 |
and | a and b | 布爾"與" -如果a為False,a and b 返回False,否則它返回b的計算值 | (a and b)返回20. |
or | a or b | 布爾"或" -如果a是非0,它返回a的值,否則它返回b的計算值 | (a and b)返回10. |
not | not a | 布爾"非" -如果a為True,返回False.如果a為False,他返回True | not(a and b)返回False. |
成員運算符
除了以上的一些運算符之外,Python還支持成員運算符,測試實例中包含了一系列的成員,包括字元串,列表或元組。
運算符 | 描述 | 實例 |
in | 如果在指定的序列中找到值返回True.則返回False | a在b序列中.如果a在b序列中返回True |
not in | 如果在指定的序列中沒有找到值返回True.否則返回False | a不在b序列中.如果a不在b序列中返回True |
身份運算符
身份運算符用於比較兩個對象的存儲單元
運算符 | 描述 | 實例 |
is | is是判斷兩個標識符是不是引用自一個對象 | a is b.如果id(a)等於id(b).is返回結果1 |
is not | is not是判斷兩個標識符是不是引用自不同對象 | a is not b.如果id(a)不等於id(b).is not返回結果1 |
運算符優先順序
運算符 | 描述 |
** | 指數(最高優先順序) |
~ + - | 按位翻轉.一元加號和減號(最後兩個的方法名+@和-@) |
* / % // | 乘 ,除 ,取模和取整數 |
+ - | 加法和減法 |
>><< | 右移,左移運算符 |
& | 位"AND" |
^| | 位運算符 |
<= <> >= | 比較運算符 |
<> == != | 等於運算符 |
= %= /= //== -= += *= **= | 賦值運算符 |
is is not | 身份運算符 |
in not in | 成員運算符 |
not or and | 邏輯運算符 |
十一、表達式
11.1 表達式if...elif......else語句
Python
#Python if......else 語句 #if...else語句 #前臺輸入.在寫if...else語句時需要註意符號(符號: == " ").變數後必須加空格 a = input("age_a:") b = input("age_b:") if a == "10" and b == "20": print(a,b) else: print("Gun.......")
#Python if......elif......else
#猜年齡的游戲開始 #設置變數 user_age = 30 #用戶前臺輸入年齡.python中前臺輸入的信息後臺預設為str字元串類型 user_input = int(input("Please enter the age:")) #if條件判斷 if user_input == user_age: print("Ipuut Errors,Please enter age") elif user_input < user_age: print("Errors ,Please enter age.","正確的年齡是:",user_age) else: print("idiot")
Shell
#if...else語句
#!/bin/bash #註意:Shell中變數後不能加空格.進行對比時前後必須有空格且需要寫在[]中.then結束語不能直接跟在[]後.需要換行寫.如下 a=10 b=20 if [ $a == $b ] then echo "This is a and b:"$a$b else echo "Gun...." echo "a and b:"$a$b fi
11.2 表達式while語句
#python while語句
#無條件迴圈 count = 0 while True: print("come bye come bye",count) count += 1 #while 嵌套if語句 count = 0 while True: print("come bye come bye",count) count += 1 if count == 10: print("滾犢子") break
11.3 表達式for語句
#python for迴圈語句 #將0到9的值賦值給i並迴圈列印出來 for i in range(10): #前臺列印出來 print("迴圈列印:",i) #python for語句嵌套if語句 #將0到4的的值賦給i for i in range(5): #if語句進行條件判斷.當i大於3的時候並列印出來. if i > 3: print("Cycle:",i)