標籤:迴圈語句 get 目錄 lin 底線 標準 之間 非同步網路 日文
基礎篇
第一章 Python發展、安裝、使用
1、Python簡介
2、Python安裝
3、第一個Python程式
4、變數
5、字元編碼與二進位
6、字元編碼的區別
7、if - else流程判斷
8、while迴圈
第一章
Python
發展、安裝、使用
Python
的簡介
說到Python語言,就不得不說一下它的創始為吉多·范羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·范羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承。
下面看下最新的TIOBE熱門排行榜。
由可以看出python已經連續在2016、2017都處在第五的位置,在前五的程式設計語言中只有python任處於增長的趨勢,從中可以看出Python已經被這個行業所承認。
Python現在所能應用的情境有:
Web應用開發
Python經常被用於Web開發。比如,通過mod_wsgi模組,Apache可以運行用Python編寫的Web程式。Python定義了WSGI標準應用程式介面來協調Http伺服器與基於Python的Web程式之間的通訊。一些Web架構,如Django,TurboGears,web2py,Zope等,可以讓程式員輕鬆地開發和管理複雜的Web程式。
作業系統管理、伺服器營運的自動化指令碼
在很多作業系統裡,Python是標準的系統組件。 大多數Linux發行版以及NetBSD、OpenBSD和Mac OS X都整合了Python,可以在終端下直接運行Python。有一些Linux發行版的安裝器使用Python語言編寫,比如Ubuntu的Ubiquity安裝器,Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個叫用作業系統功能的庫。通過pywin32這個第三方軟體 包,Python能夠訪問Windows的COM服務及其它Windows API。使用IronPython,Python程式能夠直接調用.Net Framework。一般說來,Python編寫的系統管理指令碼在可讀性、效能、代碼重用度、擴充性幾方面都優於普通的shell指令碼。
科學計算
NumPy,SciPy,Matplotlib可以讓Python程式員編寫科學計算程式。
案頭軟體
PyQt、PySide、wxPython、PyGTK是Python快速開發傳統型應用程式的利器。
伺服器軟體(網路軟體)
Python對於各種網路通訊協定的支援很完善,因此經常被用於編寫伺服器軟體、網路爬蟲。第三方庫Twisted支援非同步網路編程和多數標準的網路通訊協定(包含用戶端和伺服器),並且提供了多種工具,被廣泛用於編寫高效能的伺服器軟體。
遊戲
很多遊戲使用C++編寫圖形顯示等高效能模組,而使用Python或者Lua編寫遊戲的邏輯、伺服器。相較於Python,Lua的功能更簡單、體積更小;而Python則支援更多的特性和資料類型。
構思實現,產品早期原型和迭代
YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。
還有其他的一些諸如資料分析人工智慧方面的應用。
Python
的幾種解譯器
CPython
當我們從Python官方網站下載並安裝好Python 3.5後,我們就直接獲得了一個官方版本的解譯器:CPython。這個解譯器是用C語言開發的,所以叫CPython。在命令列下運行python就是啟動CPython解譯器。
CPython是使用最廣的Python解譯器。
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
的一些特點
Python是一個解釋型、動態類型語強定義類型的程式設計語言,它擁有非常龐大的庫,具有非常高的開發效率、可移植性、可擴充、可嵌入性。當然它也有一些缺點就是代碼的執行速度慢、代碼不能加密、線程不能利用多cpu等問題。
總的來說程式設計語言是用來實現工程師思想的一個工具沒有什麼好壞之分只有你能不能利用好它的特性,不要拿一個程式的缺點和另外一個程式的有點進行對比。
Python
的安裝
Window
平台安裝
Python:
以下為在 Window 平台上安裝 Python 的簡單步驟:
- 開啟WEB瀏覽器訪問https://www.python.org/downloads/windows/
- 在下載列表中選擇你想下載版本,在這裡我選擇的是最新python3的版本 。
- 要使用安裝程式 python-XYZ.msi, Windows系統必須支援Microsoft Installer 2.0搭配使用。只要儲存安裝檔案到本機電腦,然後運行它,看看你的機器支援MSI。Windows XP和更高版本已經有MSI,很多老機器也可以安裝MSI。
- 下載後,雙擊下載包,進入Python安裝嚮導,安裝非常簡單,你只需要使用預設的設定一直在點擊"下一步"直到安裝完成即可。
- 然後就是配置環境變數 【右鍵電腦】-->【屬性】-->【進階系統設定】-->【進階】-->【環境變數】-->【在系統變數下選擇path】-->【選擇編輯】-->【把Python安裝目錄複寫到這行的最後面記住在複製安裝目錄時要打英文的分隔字元;】
Unix & Linux
平台安裝
Python
一般情況下現在的Linux預設安裝python2,如果沒有安裝就按照下面的步驟安裝:
- 開啟WEB瀏覽器訪問http://www.python.org/download/
- 選擇適用於Unix/Linux的源碼壓縮包。
- 下載及解壓壓縮包。
- 如果你需要自訂一些選項修改Modules/Setup
- 執行 ./configure 指令碼
- make
- make install
執行以上操作後,Python會安裝在 /usr/local/bin 目錄中,Python庫安裝在/usr/local/lib/pythonXX,XX為你使用的Python的版本號碼。
MAC
平台安裝
Python
現在的Mac都預設有環境變數只要到官網下載相應的版本就能夠使用
編寫第一個
Python
程式
我是用的編程的軟體是pycharm在裡面建立相應的檔案就ok,關於怎麼使用pycharm自己可以上網搜尋相關的文章。
執行的結果是:
如果實在Linux系統中在指令碼中的頂個要加上 #!/usr/bin/env python 這個的意思就是在執行程式的時候,會去取你機器的path中指定的第一個python來執行你的指令碼。這樣寫是為了防止有的Python不是安裝在預設的地方。在執行程式的時候幾個給這個檔案相應的執行許可權即:chmod a+x *.py 後就可以在當前的目錄下執行:./*.py 。或者再不給許可權的時候直接python *.py同樣有效。
變數變數定義的規則:
- 變數名只能是 字母、數字或底線的任意組合
- 變數名的第一個字元不能是數字
- 以下關鍵字不能聲明為變數名
[‘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‘]
變數命名的習慣
想要成為一個優秀的程式員首先我們要有良好的編程習慣,當你的代碼越寫越多的時候會發現你定義的變數也會越來越多,為了增加代碼的易讀性和方便調試,給變數起名時一定要遵循一定的命名習慣,你起的變數名稱最好能讓人一眼就大概知道這個變數是幹什麼用的,比如,getUserName一看就知道,這個變數應該是要擷取使用者的姓名。
check_current_conn_count代表是要檢查現在的串連數,只有這樣,別人才能在看你的代碼時知道你的這些變數的作用,而如果你把變數名全起成了var1,var2,var3…..varN,這樣別人在閱讀代碼時根本不值有這個變數是幹什麼用,給別人閱讀代碼或者調試時帶來困難這樣別人會邊看邊罵死你,同時你自己時間長了一不知道他們的意義。
變數名的定義在能表達清楚它的作用的前提下最越簡潔越好,能用一個單詞表述清楚的盡量就不要用兩個。變數起名時一般有這麼幾種寫法,你覺得哪種最簡潔,你就選哪種吧。
CheckCurrentConnCount
check_current_conn_count
checkCurrentConnCount
不好的起名:
CHECKCURRENTCONNCOUNT
Var1 var2 var3 varN
Checkcurrentconncount
變數的賦值:
在Python中變數的賦值相當於引用機制,如上面的列子:系統先在記憶體中把相應的“yangpan”這個字串儲存進去,然後把變數name指向記憶體中儲存“yangpan”的那個地址:
在Python中我們建立一個變數name,再把這個變數name賦值給下一個變數name2。實際上是使變數name2指向記憶體中的地址和變數name指向記憶體的地址相同的位置。當變數name改變賦值後變數name指向記憶體中的地址發生改變,變數name2指向記憶體中的地址不會發生改變。具體在記憶體中的變化如:
注意:
1、 賦值變數時如name = “china yang”注意這個必須要用英文的雙引號括起來,雙引號裡面的字母或數字不是連續的外面必須要有雙引號
2、 name2 = name 這個不加雙引號表示把變數name賦值給name2
3、 name3 = “name”這個表示把字串”name”賦值給name3
4、 name4 = True 這個是布爾值,一般用作邏輯判斷。
常量
剛才說到了變數,還有一概念就是常量,所謂常量就是不能變的變數,比如常用的數學常數π就是一個常量。在Python中,通常用全部大寫的變數名表示常量:
PI =3.14159265359
但事實上PI仍然是一個變數,Python根本沒有任何機制保證PI不會被改變,所以,用全部大寫的變數名表示常量只是一個習慣上的用法,如果你一定要改變變數PI的值,也沒人能攔住你。
字元編碼
因為電腦只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的電腦在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位11111111=十進位255),如果要表示更大的整數,就必須用更多的位元組。比如兩個位元組可以表示的最大整數是65535,4個位元組可以表示的最大整數是4294967295。
由於電腦是美國人發明的,因此,最早只有127個字母被編碼到電腦裡,也就是大小寫英文字母、數字和一些符號,這個編碼錶被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。
但是要處理中文顯然一個位元組是不夠的,至少需要兩個位元組,而且還不能和ASCII編碼衝突,所以,中國制定了GB2312編碼,用來把中文編進去。
你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS裡,韓國把韓文編到Euc-kr裡,各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。
因此,Unicode應運而生。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。
Unicode標準也在不斷髮展,但最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代作業系統和大多數程式設計語言都直接支援Unicode。
現在,捋一捋ASCII編碼和Unicode編碼的區別:ASCII編碼是1個位元組,而Unicode編碼通常是2個位元組。
字母A用ASCII編碼是十進位的65,二進位的01000001;
字元0用ASCII編碼是十進位的48,二進位的00110000,注意字元‘0‘和整數0是不同的;
漢字中已經超出了ASCII編碼的範圍,用Unicode編碼是十進位的20013,二進位的01001110 00101101。
你可以猜測,如果把ASCII編碼的A用Unicode編碼,只需要在前面補0就可以,因此,A的Unicode編碼是00000000 01000001。
新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的儲存空間,在儲存和傳輸上就十分不划算。
所以,本著節約的精神,又出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間的:
字元 |
ASCII |
Unicode |
UTF-8 |
A |
01000001 |
00000000 01000001 |
01000001 |
中 |
x |
01001110 00101101 |
11100100 10111000 10101101 |
從上面的表格還可以發現,UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支援ASCII編碼的曆史遺留軟體可以在UTF-8編碼下繼續工作。
搞清楚了ASCII、Unicode和UTF-8的關係,我們就可以總結一下現在電腦系統通用的字元編碼工作方式:
在電腦記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。
用記事本編輯的時候,從檔案讀取的UTF-8字元被轉換為Unicode字元到記憶體裡,編輯完成後,儲存的時候再把Unicode轉換為UTF-8儲存到檔案:
瀏覽網頁的時候,伺服器會把動態產生的Unicode內容轉換為UTF-8再傳輸到瀏覽器:
所以你看到很多網頁的源碼上會有類似<meta charset="UTF-8" />的資訊,表示該網頁正是用的UTF-8編碼。
上面這個關於字元編碼的是看見Alex老師的。個人感覺寫的簡要明了,能夠很好的理解
if- else流程判斷
在說if語句是先說一下Python中的一個內建函數input(),通過讀取控制台的輸入與使用者實現互動
if語句:
文法如下:
if expression:
do this
elif sxpression:
do this
....
else:
do this
如果運算式中的expression的值為真(不為零的任何值都為真),或運算式成立,程式將執行縮排後的內容(務必要正確的縮排)。如果不成立執行下面的elif語句同樣也是看expression的值為真(不為零的任何值都為真),或運算式成立。執行縮排後的內容。如果不成功就一直下面有的elif語句直到執行else語句時整個流程判斷結束,或者在前面執行if語句或者elif語句成功時結束流程判斷。一個簡單猜年齡小遊戲來實現這個流程判斷。這個遊戲只能玩一次
使用if-else語句中我們可以在判斷語句中嵌套判斷語句,如下面的小遊戲。
while迴圈
while迴圈語髮結構
while expression:
while_suite
while中的expression非0或者Flash時,語句while_suite會連續不斷地迴圈執行,直到expression的值為0或者Flash結束迴圈。
continue、break語句
再說到while迴圈時再來說一下跳出迴圈語句break和結束本次迴圈語句的continue的區別。再迴圈語句while中當執行到break語句時整個while迴圈的語句都將結束。然後當執行到continue語句時,如果while的expression的值為非0或者Flash時只是結束當前的迴圈,開始下一個迴圈直到執行break語句或者while中的expression的值為0或者Flash時,整個while迴圈才回結束。下面我們求1到100所有偶數相加的和:
由上面的2個列子可以愉悅的分辨出break語句時直接結束整個迴圈,而continue時結束當前的迴圈開始下一輪迴圈。
for迴圈
for迴圈可以遍曆任何序列的項目現在在這我們簡單的說下for迴圈的應用。
for <variable> in <sequence>:
<statements>
else:
<statements>
在說上面之前我們先說一下range函數,range函數會產生一個list列表。
range(i)中的i代表產生一個列表從0到i-1,也可以用xrange(i)表示關於
xrange輸出的結果和range是一樣的不過它不是立馬產生一個list他返回的是一個產生器
所以xrange做迴圈的效能比range好,尤其是返回很大的時候!
盡量用xrange吧,除非你是要返回一個列表才用range。
現在說說for迴圈。
在上面的列子中我們可以看到我們每次在range(5)建立的list對象去一個值然後輸出,再取一個值在輸出,知道取完為止。這個就是for迴圈。
關於for迴圈我說的也不多,這個純屬新人。
本人第一次寫部落格,個人也感覺寫的的好,但是我個人主要是加深下自己所學知識。我也會堅持寫下去,希望以後在寫部落格時在加深自己的理解時,能夠有所進步給一些小白帶來協助
Python成長之路