基礎篇 1python
第一章 Python發展、安裝、使用程序員
1、Python簡介web
2、Python安裝shell
3、第一個Python程序express
4、變量編程
5、字符編碼與二進制windows
6、字符編碼的區別瀏覽器
7、if - else流程判斷服務器
8、while循環網絡
說到Python語言,就不得不說一下它的創始爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。
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官方網站下載並安裝好Python 3.5後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python就是啓動CPython解釋器。
CPython是使用最廣的Python解釋器。
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用">>>"做爲提示符,而IPython用"In [序號]":做爲提示符。
PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。
絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。
Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。
IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。
Python是一個解釋型、動態類型語強定義類型的編程語言,它擁有很是龐大的庫,具備很是高的開發效率、可移植性、可擴展、可嵌入性。固然它也有一些缺點就是代碼的執行速度慢、代碼不能加密、線程不能利用多cpu等問題。
總的來講編程語言是用來實現工程師思想的一個工具沒有什麼好壞之分只有你能不能利用好它的特性,不要拿一個程序的缺點和另一個程序的有點進行對比。
如下爲在 Window 平臺上安裝 Python 的簡單步驟:
通常狀況下如今的Linux默認安裝python2,若是沒有安裝就按照下面的步驟安裝:
執行以上操做後,Python會安裝在 /usr/local/bin 目錄中,Python庫安裝在/usr/local/lib/pythonXX,XX爲你使用的Python的版本號。
如今的Mac都默認有環境變量只要到官網下載相應的版本就可以使用
我是用的編程的軟件是pycharm在裏面建立相應的文件就ok,關於怎麼使用pycharm本身能夠上網搜尋相關的文章。
若是是在Linux系統中在腳本中的頂個要加上 #!/usr/bin/env python 這個的意思就是在執行程序的時候,會去取你機器的path中指定的第一個python來執行你的腳本。這樣寫是爲了防止有的Python不是安裝在默認的地方。在執行程序的時候幾個給這個文件相應的執行權限即:chmod a+x *.py 後就能夠在當前的目錄下執行:./*.py 。或者在不給權限的時候直接執行python *.py一樣有效。
在windows下編寫的第一個程序:
#!/usr/bin/env python # -*-coding:utf-8-*- print("hello world!")
運行的結果爲hello world!
想要成爲一個優秀的程序員首先咱們要有良好的編程習慣,當你的代碼越寫越多的時候會發現你定義的變量也會愈來愈多,爲了增長代碼的易讀性和方便調試,給變量起名時必定要遵循必定的命名習慣,你起的變量名稱最好能讓人一眼就大概知道這個變量是幹什麼用的,好比,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指向內存中的地址不會發生改變。
注意:
一、 賦值變量時如name = 「china yang」注意這個必需要用英文的雙引號括起來,雙引號裏面的字母或數字不是連續的外面必需要有雙引號
二、 name2 = name 這個不加雙引號表示把變量name賦值給name2
三、 name3 = 「name」這個表示把字符串」name」賦值給name3
四、 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語句是先說一下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 expression:
while_suite
while中的expression非0或者Flash時,語句while_suite會接二連三地循環執行,直到expression的值爲0或者Flash結束循環。
再說到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 <variable> in <sequence>:
<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循環我說的也很少,這個純屬新人。
本人第一次寫博客,我的也感受寫的的好,可是我我的主要是加深下本身所學知識。我也會堅持寫下去,但願之後在寫博客時在加深本身的理解時,可以有所進步給一些小白帶來幫助