首頁 > 軟體

Linux下Python的安裝以及注意事項

2020-06-16 17:50:12

Linux的yum依賴自帶Python,為防止錯誤,這裡我們再安裝一個Python

首先檢視預設Python版本

python -V

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

[root@Python~]# yum install gcc

2、下載原始碼,https://www.python.org/ftp/python ,解壓並切換到原始碼檔案

3、編譯安裝

[root@Python tools]# tar xf Python-2.7.10.tar.xz

[root@Python tools]# ll

total 11968

drwxr-xr-x 17 1000 1000    4096 May 24 00:09 Python-2.7.10

-rw-r--r--  1 root root 12250696 May 24 00:20 Python-2.7.10.tar.xz

[root@Python tools]# cd Python-2.7.10

[root@Python Python-2.7.10]# ./configure && make && make install

4、檢視版本

[root@Python Python-2.7.10]# /usr/local/bin/python2.7 -V

Python 2.7.10

[root@Python Python-2.7.10]#

5、修改版本morePython版本

[root@Python Python-2.7.10]#mv /usr/bin/python /usr/bin/python2.6

[root@Python Python-2.7.10]#ln -s /usr/local/bin/python2.7 /usr/bin/python

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

[root@Python Python-2.7.10]#vim /usr/bin/yum

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

7、第一個Python程式碼

print ‘hello world!’

>>> print 'hello world'

hello world

>>>

8、字元編碼

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

約定字元編碼都用上面的"# -*- coding:utf-8 -*-"

#!/usr/bin/env python

#-*- coding:utf8 -*-

print 'hello world!'

print '你好,世界!'

[root@Python scripts]# ./hello.py

hello world!

你好,世界!

或者

[root@Python scripts]# python hello.py

hello world!

你好,世界!

總結:Python預設編碼是ASCII,是用一個8位元的二進位制數位表示所有英文和特殊符號,即ASCII最多有256(2的8次方)種可能,因為沒有考慮到中文,所以只能滿足英文,如果我們要考慮中文,這裡就採用utf8,(了解utf8可以將utf8與Unicode進行對比,他們的關係可以參考:http://alexiter.iteye.com/blog/1533109),在utf8中所有的英文還是用SACII碼的形式來儲存,中文就用3個位元組儲存,這樣就可以避免儲存空間的浪費。

提示:Python2.7是Python2.0的最後一個版本

9、注釋:

1)單行注釋用"#"號

比如:

[root@Python scripts]# cat hello.py 

#!/usr/bin/env python

#-*- coding:utf8 -*-

#print 'hello world!'

#print '你好,世界!

以上是單行注釋,其中"

#!/usr/bin/env python "和“#-*- coding:utf8 -*-”是特殊的注釋

2)多行注釋

[root@Python scripts]# cat hello.py

#!/usr/bin/env python

#-*- coding:utf8 -*-

print 'hello world!'

print '你好,世界!'

"""

該Python指令碼是用來測試Python語法功能的,

請不要用於正式環境

"""

三引號裡面的部分就是多行注釋一般用來說明指令碼中某段程式碼的功能

10、獲取指令碼後面的引數 sys.argv

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

•Python內部提供的模組

•業內開源的模組

•程式設計師自己開發的模組

該模組名字是sys,是Python內建的模組

[root@Python scripts]# vim  hello.py   

#!/usr/bin/env python

#-*- coding:utf8 -*-

import sys

print sys.argv

print 'hello world!'

print '你好,世界!'

在hello.py後面新增引數 localhost:8001

[root@Python scripts]# python hello.py  localhost:8001       

['hello.py', 'localhost:8001'] #---->獲取的兩個引數hello.py和localhost:8001,並且將兩個引數存放在一個集合中,該集合在這裡叫做列表:['hello.py', 'localhost:8001']

hello world!

你好,世界!

11、位元組碼

執行.py檔案後,同級目錄下會出現很多.pyc字尾的檔案,該檔案就是Python直譯器將Python指令碼編譯之後產生的位元組碼檔案

提示:Python程式碼經過編譯可以生成位元組碼檔案(即:.pyc字尾的檔案),位元組碼也可以反編譯成Python程式碼檔案(用反編譯器),如果程式碼經過Python編譯器生成位元組碼之後,再將Python程式碼該檔案刪除,後面還是可以繼續執行,如果Python程式碼內容重新更新,那麼再進行呼叫執行.pyc位元組碼時候就要重新編譯Python程式碼檔案而成新的位元組碼

12、Python的變數

變數名的要求:

1)變數名中只能是字母(大小寫)、下劃線、數位三種

2)變數名開頭不能是數位

1name="rick" 2name="bobo"這些都是不符合規範的,

3)不能使用系統的關鍵字(系統已經內建了一些關鍵字)

>>> import keyword

>>> keyword.kwlist;

['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']

>>>

以上單詞即為系統內建關鍵字,在定義變數時不要用他們作為變數名字

檢視某個變數是否是關鍵字

>>> keyword.iskeyword ('待查詢的字串')                                 

變數賦值:

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

name1 = "wupeiqi"

name2 = "alex"

#!/usr/bin/env python

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

name1 = "wupeiqi"

name2 = name1

變數賦值的實質其實就是用某個別名將指標指向記憶體中某一塊區域的儲存的資料庫,這裡兩個例子的別名依次為name1和name2,分別指向的記憶體中的對應位置的資料塊(wupeiqi,alex)

在第二種情況變數複製中,如果修改name1的值,name2值是否會變化呢?這裡我們通過實驗來證明:

>>> name1="wupeiqi"

>>> name2=name1

>>> name2

'wupeiqi'

>>> name1="alex"

>>> name2

'wupeiqi'

>>> name1

'alex'

>>>

  通過以上實驗,得出結果,變數name2的值在變數name1發生變化時並不會隨著name1而變化,因為變數的實質是儲存在記憶體中資料的別名,而別名是通過指標指向記憶體中的資料塊,當變數name1賦值為"alex"時,其實是將name1的指標指向記憶體中新開闢的資料塊“alex”,而變數name2仍然指向原來的資料塊“wupeiqi”,所以變數name2的值沒有發生變化。

  在Python中,如果要用字串相加,即:"hello"+"sb"+"alex"這樣的形式,

其實是在記憶體中一次開闢空間"hello"、“hello”+“sb”、"hello"+"sb"+“alex”等空間,而最終有用的空間為“hello”+“sb”+“alex”這一塊,而其他的則記憶體空間處於浪費狀態,這裡就要用Python的虛擬機器垃圾回收功能,而對於Python、Java這些高階語言來說,對於程式設計師一般不用去關心垃圾回收,這些都自動交給了對應的虛擬機器來完成。

另外對於:

name1="wupeiqi"

name2="wupeiqi"

實質上name1和name2指向記憶體中的兩個資料塊中的,內容都為“wupeiqi”,但是有人說id("name1")和id(name2)地址空間一樣,其實Python相對於C語言而言,對記憶體定址做了優化,對於常用的而且資料相同的內容都放在同一個地址空間內(或者地址段內),但是當資料長度達到一定的數量級之後,雖然內容相同但是記憶體地址也就會不相同,因為Python有一個記憶體地址的緩衝區,可以理解為如果資料相同而且資料長度小於等於記憶體緩衝區的長度,那麼他們的記憶體地址表現為相同,否則就不同;這裡可以用兩個列子來說明:

>>> name1="wupeiqi"

>>> name2="wupeiqi"

>>> id(name1)

140084306598864

>>> id(name2)

140084306598864

>>> a=142584756214225512155212464431641346573.

>>> b=142584756214225512155212464431641346573.

>>> id(a)

25671328

>>> id(b)

25671352

>>>

如上例所述,因為name1和name2指向的資料塊長度在Python地址空間緩衝區內,所以name1和name2的地址相同,而a和b的值已經超出了Python地址空間的緩衝區長度大小,所以顯示出兩個地址不同,其實如上例所示的兩個變數賦值相同,其實質就是在記憶體中開闢兩塊完整相同的資料塊進行儲存他們,而不是一塊資料指向兩個變數。

下面關於Python的文章您也可能喜歡,不妨看看:

Python:在指定目錄下查詢滿足條件的檔案  http://www.linuxidc.com/Linux/2015-08/121283.htm

Python2.7.7原始碼分析  http://www.linuxidc.com/Linux/2015-08/121168.htm

無需作業系統直接執行 Python 程式碼  http://www.linuxidc.com/Linux/2015-05/117357.htm

CentOS上原始碼安裝Python3.4  http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python核心程式設計 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視訊+程式碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python指令碼獲取Linux系統資訊 http://www.linuxidc.com/Linux/2013-08/88531.htm

Ubuntu下用Python搭建桌面演算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm


IT145.com E-mail:sddin#qq.com