一、python介紹
Python簡介及應(yīng)用領(lǐng)域編輯
Python是一種解釋型腳本語言,可以應(yīng)用于以下領(lǐng)域: [2]
Web 和 Internet開發(fā)
科學(xué)計(jì)算和統(tǒng)計(jì)
人工智能
桌面界面開發(fā)
軟件開發(fā)
后端開發(fā)
網(wǎng)絡(luò)爬蟲
1989年圣誕節(jié):Guido von Rossum開始寫Python語言的編譯器
Python可以應(yīng)用于眾多領(lǐng)域,如:數(shù)據(jù)分析、組件集成、網(wǎng)絡(luò)服務(wù)、圖像處理、數(shù)值計(jì)算和科學(xué)計(jì)算等眾多領(lǐng)域。目前業(yè)內(nèi)幾乎所有大中型互聯(lián)網(wǎng)企業(yè)都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團(tuán)等。
Python的優(yōu)缺點(diǎn)
Python的優(yōu)點(diǎn)很多,簡單的可以總結(jié)為以下幾點(diǎn)。
- 簡單和明確,做一件事只有一種方法。
- 學(xué)習(xí)曲線低,跟其他很多語言相比,Python更容易上手。
- 開放源代碼,擁有強(qiáng)大的社區(qū)和生態(tài)圈。
- 解釋型語言,天生具有平臺(tái)可移植性。
- 對兩種主流的編程范式(面向?qū)ο缶幊毯秃瘮?shù)式編程)都提供了支持。
- 可擴(kuò)展性和可嵌入性,例如在Python中可以調(diào)用C/C++代碼。
- 代碼規(guī)范程度高,可讀性強(qiáng),適合有代碼潔癖和強(qiáng)迫癥的人群。
Python的缺點(diǎn)主要集中在以下幾點(diǎn)。
- 執(zhí)行效率稍低,因此計(jì)算密集型任務(wù)可以由C/C++編寫。
- 代碼無法加密,但是現(xiàn)在很多公司都不銷售賣軟件而是銷售服務(wù),這個(gè)問題會(huì)被弱化。
- 在開發(fā)時(shí)可以選擇的框架太多(如Web框架就有100多個(gè)),有選擇的地方就有錯(cuò)誤。
目前Python主要應(yīng)用領(lǐng)域:
云計(jì)算: 云計(jì)算最火的語言, 典型應(yīng)用OpenStack
WEB開發(fā): 眾多優(yōu)秀的WEB框架,眾多大型網(wǎng)站均為Python開發(fā),Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
科學(xué)運(yùn)算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
系統(tǒng)運(yùn)維: 運(yùn)維人員必備語言
金融:量化交易,金融分析,在金融工程領(lǐng)域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動(dòng)態(tài)語言的Python,語言結(jié)構(gòu)清晰簡單,庫豐富,成熟穩(wěn)定,科學(xué)計(jì)算和統(tǒng)計(jì)分析都很牛逼,生產(chǎn)效率遠(yuǎn)遠(yuǎn)高于c,c++,java,尤其擅長策略回測
圖形GUI: PyQT, WxPython,TkInter
語言類型
| 編譯型 | 解釋型 | 混合型 |
|---|---|---|
| C | Python | Java |
| C++ | JavaScript | C# |
| Go | Ruby | |
| Swift | Php |
編譯型
優(yōu)點(diǎn):編譯器一般會(huì)有預(yù)編譯的過程對代碼進(jìn)行優(yōu)化。因?yàn)榫幾g只做一次,運(yùn)行時(shí)不需要編譯,所以編譯型語言的程序執(zhí)行效率高??梢悦撾x語言環(huán)境獨(dú)立運(yùn)行。
缺點(diǎn):編譯之后如果要修改就需要修改整個(gè)模塊崇信編譯。編譯的時(shí)候根據(jù)對應(yīng)的運(yùn)行環(huán)境生成機(jī)器碼,不同的操作系統(tǒng)之間移植就會(huì)有問題,需要根據(jù)運(yùn)行的操作系統(tǒng)環(huán)境編譯不同的可執(zhí)行文件。
解釋型
優(yōu)點(diǎn):有良好的平臺(tái)兼容性,在任何環(huán)境中都可以運(yùn)行,前提是安裝了解釋器(虛擬機(jī))。靈活,修改代碼的時(shí)候直接修改就可以了,可以快速部署,不需要停機(jī)維護(hù)。
缺點(diǎn):每次運(yùn)行的時(shí)候都需要解釋一遍,性能上不如編譯型語言。
要在電腦上運(yùn)行python就必須安裝python環(huán)境即安裝python解釋器
Windows環(huán)境
可以在Python官方網(wǎng)站下載到Python的Windows安裝程序(exe文件),需要注意的是如果在Windows 7環(huán)境下安裝Python 3.x,需要先安裝Service Pack 1補(bǔ)丁包(可以通過一些工具軟件自動(dòng)安裝系統(tǒng)補(bǔ)丁的功能來安裝),安裝過程建議勾選“Add Python 3.x to PATH”(將Python 3.x添加到PATH環(huán)境變量)并選擇自定義安裝,在設(shè)置“Optional Features”界面最好將“pip”、“tcl/tk”、“Python test suite”等項(xiàng)全部勾選上。強(qiáng)烈建議選擇自定義的安裝路徑并保證路徑中沒有中文。安裝完成會(huì)看到“Setup was successful”的提示。如果稍后運(yùn)行Python程序時(shí),出現(xiàn)因?yàn)槿笔б恍﹦?dòng)態(tài)鏈接庫文件而導(dǎo)致Python解釋器無法工作的問題,可以按照下面的方法加以解決。
如果系統(tǒng)顯示api-ms-win-crt*.dll文件缺失,可以參照《api-ms-win-crt*.dll缺失原因分析和解決方法》一文講解的方法進(jìn)行處理或者直接在微軟官網(wǎng)下載Visual C++ Redistributable for Visual Studio 2015文件進(jìn)行修復(fù);如果是因?yàn)楦耊indows的DirectX之后導(dǎo)致某些動(dòng)態(tài)鏈接庫文件缺失問題,可以下載一個(gè)DirectX修復(fù)工具進(jìn)行修復(fù)。
Linux環(huán)境
Linux環(huán)境自帶了Python 2.x版本,最新的系統(tǒng)版本都安裝了python3.x版本,一般是python3.5,但是如果要更新到3.x的版本,可以在Python的官方網(wǎng)站下載Python的源代碼并通過源代碼構(gòu)建安裝的方式進(jìn)行安裝,具體的步驟如下所示(以CentOS為例)。
- 安裝依賴庫(因?yàn)闆]有這些依賴庫可能在源代碼構(gòu)件安裝時(shí)因?yàn)槿笔У讓右蕾噹於。?/li>
yum -y install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
- 下載Python源代碼并解壓縮到指定目錄。
wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz
xz -d Python-3.7.6.tar.xz
tar -xvf Python-3.7.6.tar
- 切換至Python源代碼目錄并執(zhí)行下面的命令進(jìn)行配置和安裝。
cd Python-3.7.6
./configure --prefix=/usr/local/python37 --enable-optimizations
make && make install
- 修改用戶主目錄下名為.bash_profile的文件,配置PATH環(huán)境變量并使其生效。
cd ~
vim .bash_profile
# ... 此處省略上面的代碼 ...
export PATH=$PATH:/usr/local/python37/bin
# ... 此處省略下面的代碼 ...
- 激活環(huán)境變量。
source .bash_profile
macOS環(huán)境
macOS也自帶了Python 2.x版本,可以通過Python的官方網(wǎng)站提供的安裝文件(pkg文件)安裝Python 3.x的版本。默認(rèn)安裝完成后,可以通過在終端執(zhí)行python命令來啟動(dòng)2.x版本的Python解釋器,啟動(dòng)3.x版本的Python解釋器需要執(zhí)行python3命令。
運(yùn)行Python程序
確認(rèn)Python的版本
可以Windows的命令行提示符中鍵入下面的命令。
python --version
或者是在Linux或macOS系統(tǒng)的終端中鍵入下面的命令。
python3 --version

由于我是使用的anaconda,所以用的是python --version
當(dāng)然也可以先輸入python或python3進(jìn)入交互式環(huán)境,再執(zhí)行以下的代碼檢查Python的版本。
import sys
print(sys.version_info)
print(sys.version)
編寫Python源代碼
可以用文本編輯工具(推薦使用Sublime、Visual Studio Code等高級文本編輯工具)編寫Python源代碼并用py作為后綴名保存該文件,代碼內(nèi)容如下所示。
print('hello, world!')

指定解釋器
在編寫的腳本中添加#!/usr/bin/env python,明確的指出腳本由python解釋器來執(zhí)行。使用./xxx.py來執(zhí)行。
變量
#_*_coding:utf-8_*_
name = smallpotato
age = 23
上述代碼申明了兩個(gè)變量,name,age。使用命令type()檢查變量類型??梢允褂肞ython中內(nèi)置的函數(shù)對變量類型進(jìn)行轉(zhuǎn)換。
-
int():將一個(gè)數(shù)值或字符串轉(zhuǎn)換成整數(shù),可以指定進(jìn)制。 -
float():將一個(gè)字符串轉(zhuǎn)換成浮點(diǎn)數(shù)。 -
str():將指定的對象轉(zhuǎn)換成字符串形式,可以指定編碼。 -
chr():將整數(shù)轉(zhuǎn)換成該編碼對應(yīng)的字符串(一個(gè)字符)。 -
ord():將字符串(一個(gè)字符)轉(zhuǎn)換成對應(yīng)的編碼(整數(shù))。
變量定義的規(guī)則
- 變量名只能是字母、數(shù)字或下劃線的任意組合
- 變量名第一個(gè)字母不能是數(shù)字
- 關(guān)鍵字不能作為變量名
中文編碼
ASCII、GB2312、GBK、GB18030,顯然ASCII碼無法將世界上各種字符全部顯示,所以,就需要一種可以代表所有的符號(hào)的編碼:Unicode。
注釋
單行注釋:#注釋部分
多行注釋:”“”注釋部分“”“
Test
import this
”python之禪“不僅適用于python,還適用于其他編程語言。
用戶輸入
#!/usr/bin/env python
#_*_coding:utf-8_*_
name = input("Please input your name:")
print("Hello" + name)

模塊
python的強(qiáng)大之處在于他有非常豐富和強(qiáng)大的標(biāo)準(zhǔn)庫和第三方庫。
像我們輸入密碼時(shí),如果不想顯示,可以利用標(biāo)準(zhǔn)庫getpass模塊。

sys模塊

os模塊
turtle模塊
import turtle
turtle.pensize(4)
turtle.pencolor('red')
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.mainloop()
指令和程序
計(jì)算機(jī)的硬件系統(tǒng)通常由五大部件構(gòu)成,包括:運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備。其中,運(yùn)算器和控制器放在一起就是我們通常所說的中央處理器,它的功能是執(zhí)行各種運(yùn)算和控制指令以及處理計(jì)算機(jī)軟件中的數(shù)據(jù)。我們通常所說的程序?qū)嶋H上就是指令的集合,我們程序就是將一系列的指令按照某種方式組織到一起,然后通過這些指令去控制計(jì)算機(jī)做我們想讓它做的事情。今天我們大多數(shù)時(shí)候使用的計(jì)算機(jī),雖然它們的元器件做工越來越精密,處理能力越來越強(qiáng)大,但究其本質(zhì)來說仍然屬于“馮·諾依曼結(jié)構(gòu)”的計(jì)算機(jī)?!榜T·諾依曼結(jié)構(gòu)”有兩個(gè)關(guān)鍵點(diǎn),一是指出要將存儲(chǔ)設(shè)備與中央處理器分開,二是提出了將數(shù)據(jù)以二進(jìn)制方式編碼。二進(jìn)制是一種“逢二進(jìn)一”的計(jì)數(shù)法,跟我們?nèi)祟愂褂玫摹胺晔M(jìn)一”的計(jì)數(shù)法沒有實(shí)質(zhì)性的區(qū)別,人類因?yàn)橛惺种杆允褂昧耸M(jìn)制(因?yàn)樵跀?shù)數(shù)時(shí)十根手指用完之后就只能進(jìn)位了,當(dāng)然凡事都有例外,瑪雅人可能是因?yàn)殚L年光著腳的原因把腳趾頭也算上了,于是他們使用了二十進(jìn)制的計(jì)數(shù)法,在這種計(jì)數(shù)法的指導(dǎo)下瑪雅人的歷法就與我們平常使用的歷法不一樣,而按照瑪雅人的歷法,2012年是上一個(gè)所謂的“太陽紀(jì)”的最后一年,而2013年則是新的“太陽紀(jì)”的開始,后來這件事情被以訛傳訛的方式誤傳為”2012年是瑪雅人預(yù)言的世界末日“這種荒誕的說法,今天我們可以大膽的猜測,瑪雅文明之所以發(fā)展緩慢估計(jì)也與使用了二十進(jìn)制有關(guān))。對于計(jì)算機(jī)來說,二進(jìn)制在物理器件上來說是最容易實(shí)現(xiàn)的(高電壓表示1,低電壓表示0),于是在“馮·諾依曼結(jié)構(gòu)”的計(jì)算機(jī)都使用了二進(jìn)制。雖然我們并不需要每個(gè)程序員都能夠使用二進(jìn)制的思維方式來工作,但是了解二進(jìn)制以及它與我們生活中的十進(jìn)制之間的轉(zhuǎn)換關(guān)系,以及二進(jìn)制與八進(jìn)制和十六進(jìn)制的轉(zhuǎn)換關(guān)系還是有必要的。如果你對這一點(diǎn)不熟悉,可以自行使用維基百科或者百度百科科普一下。
數(shù)據(jù)類型
- 數(shù)字
int(整型)
在32位機(jī)器上,整數(shù)的位數(shù)為32位,取值范圍為-231~231-1,即-2147483648~2147483647
在64位系統(tǒng)上,整數(shù)的位數(shù)為64位,取值范圍為-263~263-1,即-9223372036854775808~9223372036854775807
long(長整型)
跟C語言不同,Python的長整數(shù)沒有指定位寬,即:Python沒有限制長整數(shù)數(shù)值的大小,但實(shí)際上由于機(jī)器內(nèi)存有限,我們使用的長整數(shù)數(shù)值不可能無限大。
注意,自從Python2.2起,如果整數(shù)發(fā)生溢出,Python會(huì)自動(dòng)將整數(shù)數(shù)據(jù)轉(zhuǎn)換為長整數(shù),所以如今在長整數(shù)數(shù)據(jù)后面不加字母L也不會(huì)導(dǎo)致嚴(yán)重后果了。
float(浮點(diǎn)型)
先掃盲 http://www.cnblogs.com/alex3714/articles/5895848.html
浮點(diǎn)數(shù)用來處理實(shí)數(shù),即帶有小數(shù)的數(shù)字。類似于C語言中的double類型,占8個(gè)字節(jié)(64位),其中52位表示底,11位表示指數(shù),剩下的一位表示符號(hào)。
complex(復(fù)數(shù))
復(fù)數(shù)由實(shí)數(shù)部分和虛數(shù)部分組成,一般形式為x+yj,其中的x是復(fù)數(shù)的實(shí)數(shù)部分,y是復(fù)數(shù)的虛數(shù)部分,這里的x和y都是實(shí)數(shù)。
注:Python中存在小數(shù)字池:-5 ~ 257
- 布爾型:布爾值只有
True、False兩種值,要么是True,要么是False,在Python中,可以直接用True、False表示布爾值(請注意大小寫),也可以通過布爾運(yùn)算計(jì)算出來(例如3 < 5會(huì)產(chǎn)生布爾值True,而2 == 1會(huì)產(chǎn)生布爾值False)。 - 字符串
name = "nkonk"
#print("i am %s " % name)
print("i am {}".format(name))
Test
溫度轉(zhuǎn)換
#!/usr/bin/env python
#_*=coding:utf-8_*_
f = float(input('請輸入華氏溫度: '))
c = (f - 32) / 1.8
print('%.1f華氏度 = %.1f攝氏度' % (f, c))

輸入圓的半徑計(jì)算計(jì)算周長和面積
import math
radius = float(input('請輸入圓的半徑:'))
perimeter = 2 * math.pi * radius
area = math.pi * radius * radius
print('周長:%.2f' % perimeter)
print('面積:%.2f' % area)

判斷是否是閏年
while True:
year = int(input('請輸入年份: '))
is_leap = (year % 4 == 0 and year % 100 != 0) or \
year % 400 == 0
if is_leap == True:
print("%d是閏年" % year)
else:
print("%d不是閏年" % year)