1. 程式人生 > >Python簡介、安裝、更新、基本語法及資料型別

Python簡介、安裝、更新、基本語法及資料型別

Python簡介

python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承。  

最新的TIOBE排行榜,Python趕超PHP佔據第五!!!

由上圖可見,Python整體呈上升趨勢,反映出Python應用越來越廣泛並且也逐漸得到業內的認可!!!

Python可以應用於眾多領域,如:資料分析、元件整合、網路服務、影象處理、數值計算和科學計算等眾多領域。目前業內幾乎所有大中型網際網路企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。網際網路公司廣泛使用Python來做的事一般有:自動化運維

自動化測試大資料分析、爬蟲、Web 等。

注視:上述重點字體表示該公司主要使用Python語言開發

為什麼是Python而不是其他語言?

C 和 Python、Java、C#等

    C語言: 程式碼編譯得到 機器碼 ,機器碼在處理器上直接執行,每一條指令控制CPU工作

其他語言: 程式碼編譯得到 位元組碼 ,虛擬機器執行位元組碼並轉換成機器碼再後在處理器上執行

Python 和 C  Python這門語言是由C開發而來

  對於使用:Python的類庫齊全並且使用簡潔,如果要實現同樣的功能,Python 10行程式碼可以解決,C可能就需要100行甚至更多.
  對於速度:Python的執行速度相較與C,絕逼是慢了

Python 和 Java、C#等

  對於使用:Linux原裝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的位元組碼位元組碼再編譯成機器碼。
  • RubyPython、Brython ...

以上除PyPy之外,其他的Python的對應關係和執行流程如下:

 

PyPy,在Python的基礎上對Python的位元組碼進一步處理,從而提升執行速度!

 

Python環境 

安裝Python

windows:

1

2

3

4

5

6

7

1、下載安裝包

    https://www.python.org/downloads/

2、安裝

    預設安裝路徑:C:\python27

3、配置環境變數

    【右鍵計算機】--》【屬性】--》【高階系統設定】--》【高階】--》【環境變數】--》【在第二個內容框中找到 變數名為Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】

    如:原來的值;C:\python27,切記前面有分號

linux:

1

2

3

無需安裝,原裝Python環境

 

ps:如果自帶2.6,請更新至2.7

更新Python

windows:

1

解除安裝重灌即可

linux:

Linux的yum依賴自帶Python,為防止錯誤,此處更新其實就是再安裝一個Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

檢視預設Python版本

python -V

 

1、安裝gcc,用於編譯Python原始碼

    yum install gcc

2、下載原始碼包,https://www.python.org/ftp/python/

3、解壓並進入原始碼檔案

4、編譯安裝

    ./configure

    make all

    make install

5、檢視版本

    /usr/local/bin/python2.7 -V

6、修改預設Python版本

    mv /usr/bin/python /usr/bin/python2.6

    ln -/usr/local/bin/python2.7 /usr/bin/python

7、防止yum執行異常,修改yum使用的Python版本

    vi /usr/bin/yum

    將頭部 #!/usr/bin/python 修改為 #!/usr/bin/python2.6

Python 入門

一、第一句Python程式碼

在 /home/dev/ 目錄下建立 hello.py 檔案,內容如下:

1

print "hello,world"

執行 hello.py 檔案,即: python /home/dev/hello.py

python內部執行過程如下:

二、直譯器

上一步中執行 python /home/dev/hello.py 時,明確的指出 hello.py 指令碼由 python 直譯器來執行。

如果想要類似於執行shell指令碼一樣執行python指令碼,例: ./hello.py ,那麼就需要在 hello.py 檔案的頭部指定直譯器,如下:

1

2

3

#!/usr/bin/env python

 

print "hello,world"

如此一來,執行: ./hello.py 即可。

ps:執行前需給予 hello.py 執行許可權,chmod 755 hello.py

三、內容編碼

python直譯器在載入 .py 檔案中的程式碼時,會對內容進行編碼(預設ascill)

ASCII(American Standard Code for Information Interchange,美國標準資訊交換程式碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多隻能用 8 位來表示(一個位元組),即:2**8 = 256,所以,ASCII碼最多隻能表示 256 個符號。

顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字元和符號的編碼,即:Unicode

Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字元編碼。Unicode 是為了解決傳統的字元編碼方案的侷限而產生的,它為每種語言中的每個字元設定了統一併且唯一的二進位制編碼,規定雖有的字元和符號最少由 16 位來表示(2個位元組),即:2 **16 = 65536,
注:此處說的的是最少2個位元組,可能更多

UTF-8,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個位元組,而是將所有的字元和符號進行分類:ascii碼中的內容用1個位元組儲存、歐洲的字元用2個位元組儲存,東亞的字元用3個位元組儲存...

所以,python直譯器在載入 .py 檔案中的程式碼時,會對內容進行編碼(預設ascill),如果是如下程式碼的話:

報錯:ascii碼無法表示中文

1

2

3

#!/usr/bin/env python

 

print "你好,世界" 

改正:應該顯示的告訴python直譯器,用什麼編碼來執行原始碼,即:

1

2

3

4

#!/usr/bin/env python

# -*- coding: utf-8 -*-

 

print "你好,世界"

四、註釋

  當行注視:# 被註釋內容

  多行註釋:""" 被註釋內容 """

五、執行指令碼傳入引數

Python有大量的模組,從而使得開發Python程式非常簡潔。類庫有包括三中:

  • Python內部提供的模組
  • 業內開源的模組
  • 程式設計師自己開發的模組

Python內部提供一個 sys 的模組,其中的 sys.argv 用來捕獲執行執行python指令碼時傳入的引數

1

2

3

4

5

6

#!/usr/bin/env python

# -*- coding: utf-8 -*-

 

import sys

 

print sys.argv 

六、 pyc 檔案

執行Python程式碼時,如果匯入了其他的 .py 檔案,那麼,執行過程中會自動生成一個與其同名的 .pyc 檔案,該檔案就是Python直譯器編譯之後產生的位元組碼。

ps:程式碼經過編譯可以產生位元組碼;位元組碼通過反編譯也可以得到程式碼。

七、變數

1、宣告變數

1

2

3

4

#!/usr/bin/env python

# -*- coding: utf-8 -*-

 

name = "wupeiqi"

上述程式碼聲明瞭一個變數,變數名為: name,變數name的值為:"wupeiqi"

變數的作用:暱稱,其代指記憶體裡某個地址中儲存的內容

變數定義的規則:

  • 變數名只能是 字母、數字或下劃線的任意組合
  • 變數名的第一個字元不能是數字
  • 以下關鍵字不能宣告為變數名
    ['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']

2、變數的賦值

#!/usr/bin/env python
# -*- coding: utf-8 -*-

name1 = "wupeiqi"
name2 = "alex"


 

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

name1 = "wupeiqi"
name2 = name1


 

 

八、輸入

1

2

3

4

5

6

7

8

#!/usr/bin/env python

# -*- coding: utf-8 -*-

 

# 將使用者輸入的內容賦值給 name 變數

name = raw_input("請輸入使用者名稱:")

 

# 列印輸入的內容

print name

輸入密碼時,如果想要不可見,需要利用getpass 模組中的 getpass方法,即:

1

2

3

4

5

6

7

8

9

10

#!/usr/bin/env python

# -*- coding: utf-8 -*-

 

import getpass

 

# 將使用者輸入的內容賦值給 name 變數

pwd = getpass.getpass("請輸入密碼:")

 

# 列印輸入的內容

print pwd

九、流程控制和縮排

需求一、使用者登陸驗證

1

2

3

4

5

# 提示輸入使用者名稱和密碼

 

# 驗證使用者名稱和密碼

#     如果錯誤,則輸出使用者名稱或密碼錯誤

#     如果成功,則輸出 歡迎,XXX!

+ View Code

需求二、根據使用者輸入內容輸出其許可權

1

2

3

4

5

6

# 根據使用者輸入內容列印其許可權

 

# alex --> 超級管理員

# eric --> 普通管理員

# tony --> 業務主管

# 其他 --> 普通使用者

+ View Code

 

外層變數,可以被內層變數使用

內層變數,無法被外層變數使用

 

十、初識基本資料型別

1、數字

2 是一個整數的例子。
長整數 不過是大一些的整數。
3.23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裡,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是複數的例子。

int(整型)

  在32位機器上,整數的位數為32位,取值範圍為-2**31~2**31-1,即-2147483648~2147483647
  在64位系統上,整數的位數為64位,取值範圍為-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(長整型)
  跟C語言不同,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上由於機器記憶體有限,我們使用的長整數數值不可能無限大。
  注意,自從Python2.2起,如果整數發生溢位,Python會自動將整數資料轉換為長整數,所以如今在長整數資料後面不加字母L也不會導致嚴重後果了。
float(浮點型)
  浮點數用來處理實數,即帶有小數的數字。類似於C語言中的double型別,佔8個位元組(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
complex(複數)
  複數由實數部分和虛數部分組成,一般形式為x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裡的x和y都是實數。

注:Python中存在小數字池:-5 ~ 257

 

2、布林值

  真或假

  1 或 0

3、字串

"hello world"

萬惡的字串拼接:

  python中的字串在C語言中體現為是一個字元陣列,每次建立字串時候需要在記憶體中開闢一塊連續的空,並且一旦需要修改字串的話,就需要再次開闢空間,萬惡的+號每出現一次就會在內從中重新開闢一塊空間。

字串格式化

1

2

3

4

name = "alex"

print "i am %s " % name

 

#輸出: i am alex

PS: 字串是 %s;整數 %d;浮點數%f

字串常用功能:

  • 移除空白
  • 分割
  • 長度
  • 索引
  • 切片

4、列表

建立列表:

1

2

3

name_list = ['alex''seven''eric']

name_list = list(['alex''seven''eric'])

基本操作:

  • 索引
  • 切片
  • 追加
  • 刪除
  • 長度
  • 切片
  • 迴圈
  • 包含

5、元祖

建立元祖:

1

2

3

ages = (1122334455)

ages = tuple((1122334455))

基本操作:

  • 索引
  • 切片
  • 迴圈
  • 長度
  • 包含

6、字典(無序)

建立字典:

1

2

3

person = {"name""mr.wu"'age'18}

person = dict({"name""mr.wu"'age'18})

常用操作:

  • 索引
  • 新增
  • 刪除
  • 鍵、值、鍵值對
  • 迴圈
  • 長度

PS:迴圈,range,continue 和 break

 

十一、運算

算數運算:

比較運算:

賦值運算:

邏輯運算:

成員運算:

身份運算:

位運算:

+ View Code

運算子優先順序:

更多內容:猛擊這裡

十二、初識文字的基本操作

 

開啟檔案:

  file_obj = file("檔案路徑","模式")

開啟檔案的模式有:

  • r,以只讀方式開啟檔案
  • w,開啟一個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
  • a,開啟一個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
  • w+,開啟一個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。

讀取檔案的內容:

1

2

3

4

5

6

7

8

9

# 一次性載入所有內容到記憶體

obj.read()

 

# 一次性載入所有內容到記憶體,並根據行分割成字串

obj.readlines()

 

# 每次僅讀取一行資料

for line in obj:

  print line

寫檔案的內容:

1

obj.write('內容')

關閉檔案控制代碼:

1

obj.close()

作者:武沛齊 
出處:http://www.cnblogs.com/wupeiqi/