Python
簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠專注於解決問題而不是去搞明白語言本身。
易學:Python極其容易上手,因爲Python有極其簡單的說明文檔 。
速度快:Python 的底層是用 C 語言寫的,很多標準庫和第三方庫也都是用 C 寫的,運行速度非常快。
免費、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者可以自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。
高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
可移植性:由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm
OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows
CE、PocketPC、Symbian以及Google基於linux開發的android平臺。
解釋性:一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。 運行程序的時候,連接/轉載器軟件把你的程序從硬盤複製到內存中並且運行。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼運行
程序。
在計算機內部,Python解釋器把源代碼轉換成稱爲字節碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。這使得使用Python更加簡單。也使得Python程序更加易於移植。
面向對象:Python既支持面向過程的編程也支持面向對象的編程。在“面向過程”的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在“面向對象”的語言中,程序是由數據和功能組合而成的對象構建起來的。
可擴展性:如果需要一段關鍵代碼運行得更快或者希望某些算法不公開,可以部分程序用C或C++編寫,然後在Python程序中使用它們。
可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。
豐富的庫:Python標準庫確實很龐大。它可以幫助處理各種工作,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。
規範的代碼:Python採用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程序不需要編譯成二進制代碼。 缺點
單行語句和命令行輸出問題:很多時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較爲方便的在shell下完成簡單程序,不需要如Python一樣,必須將程序寫入一個.py文件。
獨特的語法 這也許不應該被稱爲侷限,但是它用縮進來區分語句關係的方式還是給很多初學者帶來了困惑。即便是很有經驗的Python程序員,也可能陷入陷阱當中。
應用
系統編程:提供API(Application Programming Interface應用程序編程接口),能方便進行系統維護和管理,Linux下標誌性語言之一,是很多系統管理員理想的編程工具。
圖形處理:有PIL、Tkinter等圖形庫支持,能方便進行圖形處理。
數學處理:NumPy擴展提供大量與許多標準數學庫的接口。
文本處理:python提供的re模塊能支持正則表達式,還提供SGML,XML分析模塊,許多程序員利用python進行XML程序的開發。
數據庫編程:程序員可通過遵循Python DB-API(數據庫應用程序編程接口)規範的模塊與Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等數據庫通信。python自帶有一個Gadfly模塊,提供了一個完整的SQL環境。
網絡編程:提供豐富的模塊支持sockets編程,能方便快速地開發分佈式應用程序。很多大規模軟件開發計劃例如Zope,Mnet 及BitTorrent. Google都在廣泛地使用它。
Web編程:應用的開發語言,支持最新的XML技術。
多媒體應用:Python的PyOpenGL模塊封裝了“OpenGL應用程序編程接口”,能進行二維和三維圖像處理。PyGame模塊可用於編寫遊戲軟件。
pymo引擎:PYMO全稱爲python memories off,是一款運行於Symbian S60V3,Symbian3,S60V5, Symbian3,
Android系統上的AVG遊戲引擎。因其基於python2.0平臺開發,並且適用於創建秋之回憶(memories
off)風格的AVG遊戲,故命名爲PYMO。
黑客編程:python有一個hack的庫,內置了你熟悉的或不熟悉的函數,但是缺少成就感。
官方代碼樣式
標識符
由字母,數值和下劃線組成且不能以數字
開頭,區分大小寫。
保留字符
import keyword
keyword.kwlist
False )內置常量
None )內置常量
True )內置常量
and)用於表達式運算,邏輯與操作
as)用於類型轉換
assert)斷言,用於判斷變量或條件表達式的值是否爲真
async)3.7.0新增
await)3.7.0新增,只能在通過async修飾的函數中,否則報錯SyntaxError
break)中斷循環語句的執行
class)用於定義類
continue)繼續執行下一次循環
def)用於定義函數或方法
del)刪除變量或序列的值
elif)條件語句,與if,else結合使用
else)條件語句,與if,elif結合使用
except)包含捕獲異常後的操作代碼塊,與try,finally結合使用
for)for循環語句
finally)3.7.0新增,用於異常語句,出現異常後,始終要執行finally包含的代碼塊,與try,except結合使用
from)用於導入模塊,與import結合使用
global)定義全局變量
if)條件語句,與elif,else結合使用
import)用於導入模塊,與from結合使用
in)判斷變量是否在序列中
is)判斷變量是否爲某個類的實例
lambda)定義匿名函數
nonlocal)用於聲明,修改嵌套作用域(enclosing作用域,外層非全局作用域)中的變量
not)用於表達式運算,邏輯非操作
or)用於表達式運算,邏輯非操作
pass)空的類,方法或函數的佔位符
raise)異常操作輸出
return)用於從函數返回計算結果
try)包含可能會出現異常的語句,與except,finally結合使用
while)循環語句
with)簡化python的語句
yield)用於從函數依次返回值
1,在python中,定義變量時是不需要指定變量的類型的
在運行的時候,python解釋器,會根據賦值語句等號右側的數據
自動推導出變量中保存數據的準確類型
str
表示是一個字符串類型
name = "小明"
int
表示是一個整數類型
age = 18
bool
表示是布爾類型,真True
或假False
gender = True
float
表示是一個小數類型(浮點數)
height = 1.75
weight = 75.0
2,兩個字符串變量之間不能直接使用乘法
price_str = input("蘋果的單價:")
weight_str = input("蘋果的重量:")
# 1> 將價格轉換爲小數
price = float(price_str)
# 2> 將重量轉換成小數
weight = float(weight_str)
money = price * weight
print(money)
price = float(input("蘋果的單價:"))
weight = float(input("蘋果的重量:"))
money = price * weight
print(money)
3,在字符串內部,%s表示字符串替換,%d表示用整數替換,有幾個%佔位符,後面就跟幾個變量或值,順序要對應好。如果只有一個%,那麼括號可以省略。(十進制 %06d,表示顯示位數用0補全, %02f 表示小數點後只顯示兩位)
name = "小明"
print("我的名字叫 %s,請多多關照!" % name)
student_no = 100
print("我的學號是 %04d" % student_no)
price = 8.5
weight = 7.6
money = price * weight
print("輸出蘋果單價 %.02f 元/斤, 購買了 %.02f 斤, 需要支付 %.02f 元" %(price,weight,money))
scale = 0.25
print("數據比例是 %.2f%%" % (scale * 100))
4,if
判斷(條件)語句
age = int(input("請輸入年齡:"))
if age >= 18:
print("你已成年,歡迎進入")
else:
print("禁止進入")
# 這句代碼無論條件是否成立都會執行
print("這句代碼什麼時候執行")
5,and,or,not
邏輯運算
# 1 定義一個整數變量age,判斷年齡是否正確
age = 130
# 2 要求人的年齡在0 - 120 之間
if age >= 0 and age <= 120:
print("年齡正確")
else:
print("年齡不正確")
年齡不正確
# 定義兩個整數變量 a_score,b_score,判斷成績
a_score = 40
b_score = 50
# 要求只要有一門成績 >60 分就合格
if a_score >60 or b_score >60:
print("通過")
else:
print("繼續努力")
繼續努力
# 定義一個布爾型變量 is_employee, 判斷是否屬於本公司員工
is_employee = False
# 如果不是提示禁止入內
# 在開發中,通常希望某個條件不滿足時,可以使用 not
# 如果需要拼接複雜的邏輯計算條件,同樣也可能使用到 not
if not is_employee:
print("禁止入內")
禁止入內
6,elif
# 定義holiday_name 字符串變量記錄節日名稱
holiday_name = "情人節"
if holiday_name == "情人節":
print("買玫瑰")
print("看電影")
elif holiday_name == "平安夜":
print("買蘋果")
print("吃大餐")
elif holiday_name =="生日":
print("買蛋糕")
else:
print("每天都是節日啊")
買玫瑰
看電影
7,if
的嵌套
# 定義布爾型變量 has_ticket 表示是否有車票
has_ticket = True
# 定義整數變量 knife_length 表示刀的長度,釐米
knife_length = 3
# 首先檢查是否有車票
if has_ticket:
print("請安檢")
# 安檢,檢查刀具長度
if knife_length > 20:
print("刀具過長,有 %d 釐米" % knife_length)
print("禁止入內")
else:
print("通過")
# 沒有車票
else:
print("請先買票")
請安檢
通過
8,石頭剪刀布
# 導入隨機工具包
# 注意:在導入工具包的時候,應該將導入的語句,放在文件的頂部
import random
# 從控制檯輸出要出的拳 ——石頭(1)/剪刀(2)/布(3)
player = int(input("請輸入你要出的拳:石頭(1)/剪刀(2)/布(3):"))
# 電腦 隨機 出拳
computer = random.randint(1, 3)
print("玩家選擇的拳是 %d — 電腦出的拳是 %d" % (player, computer))
# 比較勝負
if ((player == 1 and computer == 2)
or (player == 2 and computer == 3)
or (player == 3 and computer == 1)):
print("勝利")
elif player == computer:
print("平局")
else:
print("失敗")
9,while
循環語句
# 打印 Hello Python
# 定義一個整數變量
i = 0
# 開始循環
while i < 3:
# 希望在循環內執行的代碼
print("Hello Python")
# 處理計數器
i += 1
Hello Python
Hello Python
Hello Python
# 計算0—100 之間所有數字的求和
# 定義最終結果的變量
result = 0
# 定義一個整數變量記錄循環次數
i = 0
while i <= 100:
result += i
i += 1
print("0到100的數字求和 =%d" % result)
0到100的數字求和 =5050
# 計算0—100 之間所有 偶數 的累積求和結果
result = 0
i = 0
while i <=100:
# 判斷變量 I 中的數值,是否是偶數
if i % 2 == 0:
print(i)
result += i
i += 1
print("0到100之間所有偶數和 = %d" % result)
0
2
4
6
…
…
98
100
0到100之間所有偶數和 = 2550
10,continue
語句跳出本次循環。用來告訴Python跳過當前循環的剩餘語句,然後繼續進行下一輪循環。
i = 0
while i < 10:
# continue 某一條件滿足時,不執行後續重複代碼
if i == 3:
# 注意,在循環中,如果使用 continue 之前, 必須確認循環計數是否修改!!!
i += 1
continue
print(i)
i += 1
print("over")
0
1
2
4
5
6
7
8
9
over
11,break
語句用來終止循環語句,即循環語句沒有False條件或者序列還沒被完全遞歸完,也會停止執行循環語句。用在while和for中,如果使用嵌套循環,break語句將停止執行最深層的循環,並開始執行下一行代碼
i = 0
while i < 10:
# break 某一條件滿足時,退出循環,不再執行
if i == 3:
break
print(i)
i += 1
print("over")
0
1
2
over
12,循環嵌套
"""
在控制檯連續輸出五行 * ,每一行 * 的數量依次遞增
定義 1 的計數器變量、
row = 1
while row <= 5:
print("*" * row)
row += 1
"""
# 連續輸出五行 * 且每行依次遞增
row = 1
while row <= 5:
# 每一行打印的 * ,和當前行數相同
# 增加小循環,負責當前行中,每一列的 * 顯示
col = 1
while col <= row:
# print("%d" % col)
print("*", end="")
col += 1
# print("第 %d 行" % row)
# 目的在於,在一行 * 輸出完成後,添加換行!
print("")
row += 1
*
**
***
****
*****
13,print
函數
# 在默認情況下,print函數輸出內容之後,會自動在內容末尾換行
# 如果不希望換行,可以在print函數輸出內容後面增加,end=""
print("*")
print("*", end="++")
print("***")
*
*++***
14,九九乘法表
row = 1
while row <= 9:
col = 1
while col <= row :
print("%d * %d = %d" % (col, row, col*row), end="\t")
col += 1
print("")
row += 1
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
15,轉義字符
# \t 在控制檯輸出一個 製表符,協助在輸出文本時 垂直方向 保持對齊
print("1\t2\t3")
print("10\t20\t30")
# \n 在控制檯輸出一個 換行符
print(" hello\n python")
# \" 在控制檯輸出"
print("\"hello python\"")
1 2 3
10 20 30
hello
python
"hello python"
16,定義調用函數
# 定義函數的格式
# def 函數名():
# 函數封裝的代碼
# def 是 define 的縮寫
# 函數名稱 應該能表達 函數封裝代碼 功能
# 函數名稱 要符合 標識符的命名規則
def multiple_table():
row = 1
while row <= 9:
col = 1
while col <= row :
print("%d * %d = %d" % (col, row, col*row), end="\t")
col += 1
print("")
row += 1
無結果
import py14_定義函數
py14_定義函數.multiple_table()
九九乘法表
17,函數
# 定義好函數之後,只表示這個函數封裝了一段代碼
# 主動調用函數 纔會讓函數執行(保留兩行空行)
def say_hello():
"""打招呼"""
print("hello")
print("hello")
print("hello")
# 調用函數 函數名() 且不能在函數定義 上方
say_hello()
hello
hello
hello
"""
def sum_2_num():
對兩個數字的求和
num1 = 10
num2 = 20
result = num1 + num2
print("%d + %d = %d" % (num1,num2,result))
sum_2_num()
"""
def sum_2_num(num1,num2):
result = num1 + num2
print("%d + %d = %d" %(num1,num2,result))
sum_2_num(20,60)
`# 參數 增加函數的通用性,針對相同的數據處理邏輯,適應更多的數據
# (具有獨立功能的代碼塊)組織爲一個小模塊,在需要時調用
# 調用時,按照函數定義的參數順序,把希望在函數內部處理的數據,通過參數 傳遞
# 形參 :定義函數時小括號中的參數,用來接收參數,在函數內部作爲 變量
# 實參 :調用函數時小括號中的參數,用來把數據傳遞到 函數內部`
20 + 60 = 80
# 一個函數執行結束後,告訴調用者一個結果,以便調用者針對具體結果做後續處理。
def sum_2_num(num1,num2):
"""對兩個數字的求和"""
result = num1 + num2
# 使用返回值,告訴調用函數一方計算的結果
return result
# 注意:return 表示返回,下方代碼不會被執行
# 使用變量,來接受函數執行的返回結果
sum_result = sum_2_num(20,60)
print("計算結果: %d"% sum_result)
計算結果: 80
def test1():
print("*" * 10)
def test2():
print("-" * 10)
# 函數的嵌套調用
test1()
print("+" * 10)
test2()
----------
**********
++++++++++
def print_line(char,times):
print(char * times)
def print_lines(a,b):
"""打印多行分割線
:param a: 分割線使用的字符
:param b: 重複次數
"""
row = 0
while row < 5:
print_line(a,b)
row += 1
print_lines("-",5)
-----
-----
-----
-----
-----