python實戰一期:第一天
1. 為什麼學習python
1.1 為什麼要學Python?
Python第一是個非常牛B的指令碼語言,能滿足絕大部分自動化運維的需求,又能做後端C/S架構,又能用WEB框架快速開發出高大上的Web介面,只有當你自已有能力做出一套運維自動化系統的時候,你的價值才體現出來,你才有資格跟老闆談重視,否則,還是老老實實回去裝機器吧。
2. 運維開發為什麼要用Python?
Good question, 為什麼不用PHP,JAVA, C++,RUBY,這裡我只能說,見人見智, 如果你碰巧已經掌握了除Python之外的其它語言,那你愛用啥用啥,如果你是一個連SHELL都還沒寫明白的新手,想學個語言的話,請用Python,為什麼呢?
首先,PHP是跟Python比的最多的,其實他倆根本就不用比,為什麼呢?兩個語言適用性不同,PHP主要適用於Web開發,可以迅速的做出中小型,輕量級的WEB網站,但後端嘛,基本還是要藉助其它語言,藉助什麼語言呢?Shell?Python?呵呵。而Python呢,是個綜合語言,前後端都可以,單拿出來比Web,也一點不比PHP差,但為什麼Web方向上PHP比Python要火?
先入為主嘛,PHP 90年代誕生就是做Web的,Python2000年後才出現Web框架,但論優秀程度上,Python的Web框架基本上出其無左,至少是跟PHP比。
那JAVA呢?好吧,一個臃腫、中庸、豪無新意的語言,還是老老實實用它來做ERP吧,搞個運維小平臺,用JAVA真心沒啥必要,在我看來,JAVA就是穩定的中年男人,穩定、成熟、禿頂,而Python代表的就是青春,簡潔、快、乾淨、帥!
C++/C,這個嘛,我只能說,如果你會了Python,又會C的話,那你會更吃香,但是不會C的話,其實也無大礙,基本上做運維的人,搞搞C就是為了來裝B的,因為多數情況下你都到不了看系統底層原始碼的程度, 不過如果你學好了Python之後,還是建議你學習下C++,畢竟相比Python這個動態語言來講,C++的效率還是高很多的,但對新手來講,不建議做為第一門語言開始學習,為什麼呢?打擊自信心…呵呵,你懂的
Ruby,小日本開發的,還不錯,風格跟Python有點像,因為Ruby onrails出了名,國外用的比較多,國內,放心吧,沒戲,Python已經把它的想象空間都佔死了。
當然還有新的語言GO,有些搞運維的看見做開發的人員搞GO,也想湊熱鬧,覺得是未來,我想說,別瞎沒事跟風,GO再成功,也不會變成運維開發語言。
有些人覺得Python效率底,說他不能支援多執行緒,OH,好吧,這個還有點說對了,但是我想問,看我這篇文章的有幾個做過搜尋引擎開發?有幾個做個上億PV的併發網站開發?
有幾個看過LINUX核心原始碼?如果沒有,請別瞎跟著傳了,知道PYTHON為什麼不支援多執行緒嗎?這句話問錯了,其實Python支援多執行緒,只是不支援多CPU多執行緒,也就是一個程式spawn出來的多執行緒只能佔用一個CPU,但是為什麼呢?噢,因為GIL,GIL是什麼東東,請自行補腦。。。但是你非得用多執行緒嗎?你可以用多程序呀,再牛B你還可以用協程呀,這些Python支援的都很好呀,如果你的程式邏輯不好,搞個多執行緒也快不起來。
我認識一個博士講過一句話,我覺得不錯,他說,程式效率高低,80%都是寫程式的人決定了,語言本身就佔20%,所以下次有人再說PYTHON效率低的時候,請讓他先回去自己檢查下自己的程式多了多少無用的邏輯、迴圈等等。這個博士自己用Python寫的WEB程式,一臺伺服器每天能處理上億請求,一秒併發近兩萬,什麼WEB框架這麼牛B? 別問它是誰,它叫tornado。
2. python安裝
2.1 linux預設自帶python
- 可以rpm -q python檢視是否有安裝
- [root@localhost src]# rpm -q python
- python-2.7.5-58.el7.x86_64
2.2 檢視python版本
[root@localhost src]# python -V
Python 2.7.5
2.3 python使用以及退出
[root@localhost src]# python
Python 2.7.5 (default, Aug 4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'hello python'
hello python
exit() 或則ctrl d 退出python
2.4 安裝使用ipython
pip 安裝軟體從此連結搜尋https://pypi.python.org/pypi
ipython手動下載連結:https://pypi.python.org/pypi/ipython
linux下直接使用python進入直譯器時沒有命令補全功能,不太方便,可以安裝使用ipython
yum install python-pip 安裝pip命令
pip install ipython 安裝ipython
pip install ipython==5.8.0 安裝指定版本ipython
pip list 檢視已安裝的模組
pip install --upgrade pip 升級pip
輸入ipython後直接回車進入ipyhon直譯器
exit 退出ipython;
2.5 通過原始碼包安裝ipython
解壓包後,直接執行 python setup.py install
測試後發現需要安裝好多相關模組:
pip install traitlets
pip install pygments
pip install pexpect
pip install pathlib2
pip install pickleshare
pip install prompt-toolkit==1.0.15
pip install simplegeneric
2.6 擴充套件:
ipython的安裝問題
http://www.jianshu.com/p/8779eac7f313
如果報錯_scandir.c:14:20: 致命錯誤:Python.h:沒有那個檔案或目錄,#include <Python.h>,安裝python開發工具yum install python-devel
3. python檔案型別
3.1 使用方式:
- 直譯器互動方式
- python shell
- ipython
- 建立程式檔案
- 檔案執行
3.2 python檔案型別
- 原始碼
- python原始碼檔案以“.py”為副檔名,由python程式解釋,不需要編譯。
- vim 1.py
- 第一行#! /usr/bin/python註釋;表示以python解釋此檔案;
- 執行用python 1.py
- 也可以給1.py加上x許可權,執行時用./1.py
- 位元組程式碼
- python原始碼檔案經編譯後生成的副檔名為“pyc”的檔案
- 方法一:
- python -m py_compile 1.py
- 方法二編譯方法:
- import py_compile
- py_compile.compile
- .pyc"檔案格式是二進位制,不能直接檢視
- file 1.pyc 檢視檔案型別
- 把1.py檔案編譯成1.pyc
- vim 2.py
#! /usr/bin/python
import py_compile
py_compile.compile('/python/1.py')
- 執行python 2.py
- 會生成一個1.pyc
- 優化程式碼
- 經過優化的原始碼檔案,副檔名為“pyo“
- 和pyc類似,比pyc更優化些。
- python -O -m py_compile 1.py
- -O 表示優化
- -m 表示模組
- 1.py是原始碼檔案
- pyc 和 pyo檔案都是二進位制檔案,經過編譯後脫離原始碼都可以用python執行;
4. python變數
4.1 變數
- 變數是計算機記憶體中的一塊區域,變數可以儲存規定範圍內的值,而且值可以改變。
- Python下變數是對一個數據的引用
4.1.1 變數的命名
- 變數名由字母、數字、下劃線組成。
- 變數不能以數字開頭
- 不可以使用關鍵字
- a a1 _a
4.1.2 變數的賦值
- 是變數宣告和定義的過程
a = 1 給變數a賦值1
id(a) id()檢視變數在記憶體中的位置
4.2 運算子與表示式
4.2.1 Python運算子包括
1. 賦值運算子
- = x = 2 y = 'ab'
- += x += 2 表示x= x+2
- -= x -= 3 表示x= x-3
- *= x *= 2 表示x= x*2
- /= x /= 2 表示x= x除以2(不加浮點數時只取整數部分)
- %= x %= 3 表示x=x除以3取餘
2. 算術運算子
- + 加
- - 減
- * 乘
- / 除、不加浮點數時取的是整
- // 除、只取整
- % 除、取餘
- ** 乘方
3. 關係運算符
- > 大於
- < 小於
- >= 大於等於
- <= 小於等於
- == 等於
- != 不等於
- 返回的都是布林值 true 或 false
4. 邏輯運算子
- and邏輯與:True and False 兩個全對才true
- or邏輯或: False or True 兩個中任意一個對就true
- not邏輯非: not Ture 取反
注:越往下優先順序越高;同行越往右優先順序越高。
4.2.2 表示式
表示式是將不同的資料(包括變數、函式)用運算子號按一定的規則連線起來的一種式子。
4.3 練習
4.3.1 input和raw_input區別
- input更適合數字,輸入字母加上引號表示字串;
- raw_input可以直接輸入數字或字母,輸出都是字串;
4.3.2 寫一個四則運算器
vim num.py 編輯以下程式碼:
#! /usr/bin/python
num1 = input("Please input a number: ")
num2 = input("Please input a number: ")
print "%s + %s = %s" % (num1, num2, num1+num2)
print "%s - %s = %s" % (num1, num2, num1-num2)
print "%s * %s = %s" % (num1, num2, num1*num2)
print "%s / %s = %s" % (num1, num2, num1/num2)