1.1 Python介紹
1.1.1 Python簡介
Python,是一種廣泛使用的高級編程語言,屬於通用型編程語言,由吉多·範羅蘇姆(中文名字:龜叔)創造,第一版發佈於1991 年。可以視之為一種改良 (加入一些其他編程語言的優點,如面向對象) 的 LISP。
作為一種解釋型語言,Python 的設計哲學強調代碼的可讀性和簡潔的語法(尤其是使用空格縮進劃分代碼塊,而非使用大括號或者關鍵詞)。
由上圖可見,Python整體呈上升趨勢,反映出Python應用越來越廣泛並且也逐漸得到業內的認可。相比於 C++ 或 Java,Python 讓開發者能夠用更少的代碼表達想法。不管是小型還是大型程序,該語言都試圖讓程序的結構清晰明瞭。
1.1.2 Python設計哲學與定位
Python的設計哲學是“優雅”、“明確”、“簡單”。
Python開發者的哲學是“用一種方法,最好是隻有一種方法來做一件事”,也因此它和擁有明顯個人風格的其他語言很不一樣。在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確沒有或者很少有歧義的語法。
這些準則被稱為“Python格言”。在Python解釋器內運行import this可以獲得完整的列表。
>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases aren't special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless you're Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- let's do more of those!
1.1.3 Python應用範圍
Web程序:
Python經常被用於Web開發。比如,通過mod_wsgi模塊,Apache可以運行用Python編寫的Web程序。使用Python語言編寫的Gunicorn作為Web服務器,也能夠運行Python語言編寫的Web程序。
Python定義了WSGI標準應用接口來協調Http服務器與基於Python的Web程序之間的溝通。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可以讓程序員輕鬆地開發和管理複雜的Web程序。
GUI開發:
Python本身包含的Tkinter庫能夠支持簡單的GUI開發。但是越來越多的Python程序員選擇wxPython或者PyQt等GUI包來開發跨平台的桌面軟件。使用它們開發的桌面軟件運行速度快,與用户的桌面環境相契合。通過PyInstaller還能將程序發佈為獨立的安裝程序包。
其他:
YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。OLPC的作業系統Sugar項目的大多數軟件都是使用Python編寫。
1.1.4 Python的種類
1、CPython
Python的官方版本,使用C語言實現,使用最為廣泛,CPython實現會將源文件(py文件)轉換成字節碼文件(pyc文件),然後運行在Python虛擬機上。
1、 Jython
Python的Java實現,Jython會將Python代碼動態編譯成Java字節碼,然後在JVM上運行。
3、IronPython
Python的C#實現,IronPython將Python代碼編譯成C#字節碼,然後在CLR上運行(與Jypthon類似)。
4、PyPy(特殊)
Python實現的Python,將Python的字節碼字節再編譯成機器碼。
5、RubyPython,Brython ….
注意:本文中都的為Python 3.6.2 版本:https://www.python.org/downloads/release/python-362/
關於Python環境部署可以參考:http://www.runoob.com/python/python-install.html
1.2 Python的語法
Python的設計目標之一是讓代碼具備高度的可閲讀性。它設計時儘量使用其它語言經常使用的標點符號和英文單字,讓代碼看起來整潔美觀。因為Python是動態語言,它不像其他的靜態語言如C、Pascal那樣需要書寫聲明語句。
1.2.1 縮進語法
Python開發者有意讓違反了縮進規則的程序不能通過解釋,以此來強迫程序員養成良好的編程習慣,也方便所有人查找和閲讀。例如:
if age < 21: print("你不能買酒。") print("不過你能買口香糖。")print("這句話處於if語句的外面。")
如果想要類似於執行shell腳本一樣執行python腳本,例: ./clsn.py ,那麼就需要在 clsn.py文件的頭部指定解釋器,如下:
#!/usr/bin/env python# -*- coding: utf-8 -*-if age < 21: print("你不能買酒。") print("不過你能買口香糖。")print("這句話處於if語句的外面。")
注:上述例子為Python 3.0以上版本的代碼。
1.2.2 變量説明
變量定義的規則:
1、變量名只能是 字母、數字或下劃線的任意組合
2、變量名的第一個字符不能是數字
3、以下關鍵字不能聲明為變量名
[‘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’]
4、變量的定義要具有可描述性。
1.2.3 語句和控制流
|
語句類型 |
説明 |
|
if語句 |
當條件成立時運行語句塊。經常與else, elif(相當於else if)配合使用。 |
|
for語句 |
遍列列表、字符串、字典、集合等迭代器,依次處理迭代器中的每個元素。 |
|
while語句 |
當條件為真時,循環運行語句塊。 |
|
try語句 |
與except, finally, else配合使用處理在程序運行中出現的異常情況。 |
|
class語句 |
用於定義類型。 |
|
def語句 |
用於定義函數和類型的方法。 |
|
pass語句 |
表示此行為空,不運行任何操作。 |
|
assert語句 |
用於程序調適階段時測試運行條件是否滿足。 |
|
with語句 |
Python2.6以後定義的語法,在一個場景中運行語句塊。比如,運行語句塊前加鎖,然後在語句塊運行結束後釋放鎖。 |
|
yield語句 |
在迭代器函數內使用,用於返回一個元素。自從Python 2.5版本以後。這個語句變成一個運算符。 |
|
raise語句 |
拋出一個異常。 |
|
import語句 |
導入一個模塊或包。常用寫法:from module import name, import module as name, from module import name as anothername |
1.2.4 程序交互
input進行交互
#!/usr/bin/env python# -*- coding: utf-8 -*- # 將用户輸入的內容賦值給 name 變量name = input("請輸入用户名:") # 打印輸入的內容print(name)
可以讓用户輸入多個信息,如下
#!/usr/bin/env python# -*- coding: utf-8 -*-name = input("What is your name?")age = input("How old are you?")hometown = input("Where is your hometown?")print("Hello ",name , "your are ", age , "years old, you came from",hometown)
1.2.5 數據類型與動態類型
Python內置多種數據類型。下面這個列表簡要地描述了Python內置數據類型(適用於Python 3.x):
|
類型 |
描述 |
例子 |
|
str |
一個由字符組成的不可更改的有序列。在Python 3.x裏,字符串由Unicode字符組成。 |
‘Wikipedia’ “Wikipedia” “””Spanning multiple lines””” |
|
bytes |
一個由字節組成的不可更改的有序列。 |
b’Some ASCII’ b”Some ASCII” |
|
list |
可以包含多種類型的可改變的有序列 |
[4.0, ‘string’, True] |
|
tuple |
可以包含多種類型的不可改變的有序列 |
(4.0, ‘string’, True) |
|
set, frozenset |
與數學中集合的概念類似。無序的、每個元素唯一。 |
{4.0, ‘string’, True} frozenset([4.0, ‘string’, True]) |
|
dict或map |
一個可改變的由鍵值對組成的無序列。 |
{‘key1’: 1.0, 3: False} |
|
int |
精度不限的整數 |
42 |
|
float |
浮點數。精度與系統相關。 |
3.1415927 |
|
complex |
複數 |
3+2.7j |
|
bool |
邏輯值。只有兩個值:真、假 |
True False |
除了各種數據類型,Python語言還用類型來表示函數、模塊、類型本身、對象的方法、編譯後的Python代碼、運行時信息等等。因此,Python具備很強的動態性。
1.2.6 運算符
計算機可以進行的運算有很多種,可不只加減乘除這麼簡單,運算按種類可分為算數運算、比較運算、邏輯運算、賦值運算、成員運算、身份運算、位運算,今天我們暫只學習算數運算、比較運算、邏輯運算、賦值運算
算數運算
以下假設變量:a=10,b=20
比較運算
以下假設變量:a=10,b=20
賦值運算
以下假設變量:a=10,b=20
邏輯運算
關於邏輯運算
在沒有()的情況下not 優先級高於 and,and優先級高於or,即優先級關係為( )>not>and>or,同一優先級從左往右計算。
in,not in :
判斷子元素是否在原字符串(字典,列表,集合)中:
例如:
#print('喜歡' in 'dkfljadklf喜歡hfjdkas')#print('a' in 'bcvd')#print('y' not in 'ofkjdslaf')
常見的佔位符有:
1.3 流程控制語句
1.3.1 流程控制之–if
假如把寫程序比做走路,那我們到現在為止,一直走的都是直路,還沒遇到過分叉口,想象現實中,你遇到了分叉口,然後你決定往哪拐必然是有所動機的。你要判斷那條岔路是你真正要走的路,很簡單,只需要在程序裏預設一些條件判斷語句,滿足哪個條件,就走哪條岔路。這個過程就叫流程控制。
單分支
if 條件: 滿足條件後要執行的代碼
雙分支
"""if 條件: 滿足條件執行代碼else: if條件不滿足就走這段"""MemInfo = 48if MemInfo > 95 : print("內存即將用光")else: print("沒事,放心用!")
多分支
if 條件: 滿足條件執行代碼elif 條件: 上面的條件不滿足就走這個elif 條件: 上面的條件不滿足就走這個elif 條件: 上面的條件不滿足就走這個 else: 上面所有的條件不滿足就走這段
示例:猜猜我的年齡
age_of_clsn = 24guess = int(input(">>:"))if guess > age_of_clsn : print("猜的太大了,往小裏試試...")elif guess < age_of_clsn : print("猜的太小了,往大里試試...")else: print("恭喜你,猜對了...")
1.3.2 流程控制之–while循環
基本while循環
while 條件: # 循環體 # 如果條件為真,那麼循環體則執行 # 如果條件為假,那麼循環體不執行
循環中止語句
如果在循環的過程中,因為某些原因,你不想繼續循環了,怎麼把它中止掉呢?這就用到break 或 continue 語句
break用於完全結束一個循環,跳出循環體執行循環後面的語句
continue和break有點類似,區別在於continue只是終止本次循環,接着還執行後面的循環,break則完全終止循環。
示例:
之前猜年齡的代碼運行一次使用一次,但稍加修改就能一自運行。
age_of_clsn = 24while True: guess = int(input(">>:")) if guess > age_of_clsn: print("猜的太大了,往小裏試試...") elif guess < age_of_clsn: print("猜的太小了,往大里試試...") else: print("恭喜你,猜對了...") break
1.3.3 格式化輸出
現有一練習需求,問用户的姓名、年齡、工作、愛好 ,然後打印成以下格式
------------ info of Alex Li -----------Name : CLSNAge : 24job : Linux OpsHobbie: girl------------- end -----------------
這樣的格式如何輸出呢?
name = input("Name:")age = input("Age:")job = input("Job:")hobbie = input("Hobbie:")info = '''------------ info of %s ----------- #這裏的每個%s就是一個佔位符,本行的代表 後面拓號裏的 name Name : %s #代表 name Age : %s #代表 age job : %s #代表 job Hobbie: %s #代表 hobbie ------------- end -----------------''' %(name,name,age,job,hobbie) # 這行的 % 號就是 把前面的字符串 與拓號 後面的 變量 關聯起來 print(info)
在格式化輸出裏面,怎麼表示%?
msg = "我是%s,年齡%d,目前工作進度為80%%"%('clsn',24)print(msg)
使用%% 將 % 轉義.
1.4 編碼説明
|
字符 |
ASCII |
Unicode |
utf-8 |
GBK |
|
英文 |
1個字節 |
2-4個字節 |
1個字節 |
1個字節 |
|
中文 |
x |
2-4個字節 |
3個字節 |
2個字節 |
|
其他 |
x |
2-4個字節 |
2個字節 |
x |
注: 1個字節 = 8 位bit