第一節 Python文件類型 源代碼 Python源代碼的文件以“py”為擴展名,由Python程式解釋,不需要編譯 位元組代碼 Python源文件經編譯後生成的擴展名為“pyc”的文件 編譯方法 優化代碼 經過優化的源文件,擴展名為“.pyo” 以上三種均可直接運行 第二節 Python變數 變數的 ...
第一節 Python文件類型
源代碼
- Python源代碼的文件以“py”為擴展名,由Python程式解釋,不需要編譯
位元組代碼
- Python源文件經編譯後生成的擴展名為“pyc”的文件
編譯方法
import py_compile py_compile.compile("hello.py")
優化代碼
- 經過優化的源文件,擴展名為“.pyo”
python -O -m py_compile hello.py
以上三種均可直接運行
第二節 Python變數
變數的定義
- 變數是電腦記憶體中的一塊區域,變數可以存儲規定範圍內的值,而且值可以改變。
變數的命名
- 變數名有字母、數字、下劃線組成。
- 數字不能開頭
- 不可以使用關鍵字
a a1 a_ a_1
變數的賦值
是變數聲明和定義的過程
a = 1 ld(a)
第三節 運算符與表達式
案例:寫一個自己的四則運算器
#!/usr/bin/python
import sys
running = True
while running:
try:
t = int(raw_input())
p = int(raw_input())
except EOFError:
break
print 'operator + result\n', t + p
print 'operator - result\n', t - p
print 'operator * result\n', t * p
print 'operator / result\n', t / p
Python運算符包括
賦值運算符
x = 3, y = 'abcde' #等於 x += 2 #加等於 x -= 2 #減等於 x *= 2 #乘等於 x /= 2 #除等於 x %= 2 #求餘等於
算術運算符
x + y #加法 x - y #減法 x * y #乘法 x / y #實數除法 x // y #整數除法 x % y #求餘 x**y #求冪
關係運算符
x < y #大於 x > y #小於 x <= y #小於等於 x >= y #大於等於 x != y #不等於 x == y #完全等於
邏輯運算符
and #與 or #或 not #非
表達式
- 表達式是將不同數據(包括變數、函數)用運算符按一定規則連接起來的一種式子
運算符的優先順序
- 在常規表達式中,存在著多個運算符,比如:
1+2*3-1/2*3/2
,那麼就存在著計算優先度的問題 - 一般的,運算符存在高低級別,在同一個表達式中,高優先順序的運算符:比如:
1*2+3*3 = 11
而不是15 - 對於同級別的運算符,按從左到右處理。例如:
8*4/2*3 = 48
運算符優先順序由低到高是:
Lambda 邏輯或:or 邏輯與:and 邏輯非:not 成員測試:in not in 同一性測試:is is not 比較:< <= > >= != == 按位或:| 按位異或:^ 按位與:& 移位:<< >> 加法與減法:+ - 乘法、除法與取餘:* / % 正負號:+x -x 按位翻轉:~x 指數:**
第四節 數據類型
案例
123
和"123"
一樣嗎() [] {}
數據類型
- 電腦是用來輔助人們的,在程式設計中也映射了現實世界的分類,以便於抽象的分析。
- 數字
- 字元串
- 列表
- 元組
- 字典
數字類型
- 整型
- 長整形
- 浮點型
- 複數型
數字類型-整數int
- 整數int表示的範圍-2147483648到2147483647。例如:0,100,-100
int的範圍示例:
num=2147483647 type(num) #輸出結果: <type 'int'>
數字類型-長整數long
- long的範圍很大很大,幾乎可以說任意大的整數均可以存儲。
為了區分普通整數和長整數,需要在整數後加L或小寫l。例如:
51856678L, -0x22345L
num = 11 type(num) #輸出結果: <type 'int'> num = 9999999999999999999999 type(num) #輸出結果: <type 'long'>
數字類型-浮點型float
- 例如:
0.0, 12.0, -18.8, 3e+7
示例:
num = 0.0 type(num) #輸出結果: <type 'float'> num = 12 type(num) #輸出結果: <type 'int'> num = 12.0 type(num) #輸出結果: <type 'float'>
數字類型-複數型complex
- Python對複數提供內嵌支持,這是其他大部分軟體所沒有的
- 複數舉例:
3.14j, 8.32e-36j
示例:
>>> num=3.14j >>> type(num) <type 'complex'> >>> num 3.14j >>> print num 3.14j
字元串String
使用引號定義的一組可以包含數字、字母、符號(非特殊系統符號)的集合。
Strval='This is a test' Strval="This is a test" Strval="""This is a test"""
三重引號(docstring)通常用來製作字元串,在面向對象時詳解
第五節 序列
基本概念
- 列表、元組和字元串都是序列
- 序列的兩個主要特點是索引操作符和切片操作符。
- 索引操作符讓我們可以從序列中抓取一個特定項目。
- 切片操作符讓我們能夠獲取序列的一個切片,即一部分序列。
- 索引同樣可以是負數,位置是從序列尾開始計算的。
- 因此,shoplist[-1]表示序列的最後一個元素,而shoplist[-2]抓取序列的倒數第二個項目
- 切片操作符是序列名後跟一個方括弧,方括弧中有一對可選的數字,並用冒號分割。
- 註意這與你使用的索引操作符十分相似。記住數是可選的,而冒號是必須的。
- 切片操作符中的第一個數(冒號之前)表示切片開始的位置,第二個數(冒號之後)表示切片到哪裡結束。如果不指定第一個數,Python就從序列首開始。如果沒有指定第二個數,則Python會停止在序列尾。
- 註意:返回的序列從開始位置開始,剛好在結束位置之前結束。即開始位置是包含在序列切片中的,而結束位置被排斥在切片外。
- shoplist[1:3]返回從位置1開始,包括位置2,但是停止在位置3的一個序列切片,因此返回一個含有兩個項目的切片。shoplist[:]返回整個序列的拷貝。你可以用負數做切片。負數用在從序列尾開始計算的位置。例如,shoplist[:-1]會返回除了最後一個項目外包含所有項目的序列切片
序列的基本操作
len()
:求序列的長度+
:連接兩個序列*
:重覆序列元素in
:判斷元素是否在序列中max()
:返回最大值min()
:返回最小值cmp(tuple1, tuple2)
:比較兩個序列值是否相同
元組()
- 元組和列表十分類似,只不過元組和字元串一樣是不可變的,即你不能修改元組。
- 元組通過圓括弧中用逗號分割的項目定義。
- 元組通常用在使語句或用戶定義的函數能夠安全地採用一組值的時候,即被使用的元組的值不會改變。
- 創建元組
- 一個空的元組由一對空的圓括弧組成,如:
myempty=()
- 含有單個元素的元組,
singleton=(2)
一般的元組
zoo=('wolf', 'elephant', 'penguin') new_zoo=('monkey', 'dolphin', zoo)
- 一個空的元組由一對空的圓括弧組成,如:
- 元組操作
- 元組和字元串一樣屬於序列類型,可通過索引和切片操作。
- 元組值亦不可變
第六節 序列-列表
列表[]
- list是處理一組有序項目的數據結構,即你可以在一個列表中存儲一個序列的項目。
- 列表是可變類型的數據。
列表的組成:用[]表示列表,包含了多個以逗號分隔開的數字,或者子串。
list1=['Simon', 'David', 'Clotho'] list2=[1,2,3,4,5] list3=["str1", "str2", "str3", "str4"]
列表操作
- 取值
- 切片和索引
- list[]
- 添加
- list.append()
- 刪除
- del(list[])
- list.remove(list[])
- 修改
- list[]=x
- 查找
- var in list
示例:
>>> list1=['jack', 20, 'male'] >>> list1 ['jack', 20, 'male'] >>> list1.append('USA') >>> list1 ['jack', 20, 'male', 'USA'] >>> list1.remove('USA') >>> list1 ['jack', 20, 'male'] >>> help(list1.remove) >>> list1[1]=22 >>> list1 ['jack', 22, 'male'] >>> 22 in list1 True
對象與類快速入門
- 對象和類,更好的理解列表。
- 對象=屬性+方法
- 列表是使用對象和類的一個例子
- 當你使用變數i並給它賦值時候,比如整數5,你可以認為你創建了一個類(類型)int的對象(實例)i。
- help(int)
- 類也有方法,即僅僅為類而定義的函數。
- 僅在該類的對象可以使用這些功能。
- 例如:
- Python為list類提供了append方法,這個方法讓你在列表尾添加一個項目。
- mylist.append('an item')列表mylist中增加字元串。註意,使用點號來使用對象的方法。
- 類也有變數,僅為類而定義的變數
- 僅在該類的對象可以使用這些變數/名稱
- 通過點號使用,例如mylist.field。
第七節 字典
基本概念
- 字典是Python中唯一的映射類型(哈希表)。
- 字典對象是可變的,但是字典的鍵必須使用不可變的對象,並且一個字典中可以使用不同類型的鍵值。
- keys()或者values()返回鍵列表或值列表。
- items()返回包含鍵值對的元值。
示例:
>>> dict={'name': 'jack', 'age' : 30, 'gender':'male' } >>> dict['name'] 'jack' >>> dict['age'] 30 >>> dict['gender'] 'male' >>> dict.keys() ['gender', 'age', 'name'] >>> dict.values() ['male', 30, 'jack'] >>> dict.items() [('gender', 'male'), ('age', 30), ('name', 'jack')]
創建字典
dict = {}
使用工廠方法dict()
fdict=dict(['x',1], ['y',2])
內建方法:fromkeys(),字典中的元素具有相同的值,預設為None
ddict={}.fromkeys(('x','y'), -1) #輸出結果:{'x': -1, 'y': -1}
訪問字典中的值
- 直接使用key訪問:key不存在會報錯,可以使用has_key()或者in和not in判斷,但是has_key方法即將廢棄。
- 迴圈遍歷:
for key in dict1.keys():
- 使用迭代器:
for key in dict1:
更新和刪除
- 直接用鍵值訪問更新;內建的
update()
方法可以將整個字典的內容拷貝到另一個字典中。 del dict1['a']
:刪除字典中鍵值為a的元素dict1.pop('a')
:刪除並且返回鍵為'a'的元素dict1.clear()
:刪除字典所有元素del dict1
:刪除整個字典
字典相關的內建函數
type(), str(), cmp()
(cmp很少用於字典的比較,比較依次是字典的大小、鍵、值)
工廠函數dict()
* 例如:
dict(zip(('x','y'),(1,2)))
dict(x=1,y=2)
#輸出結果:{'x': 1, 'y': 2}
- 使用字典生成字典比用copy慢,因此這種情況下推薦使用
copy()
常用函數
len()
:返回序列的大小hash()
: 用於判斷某個對象是否可以做一個字典的鍵,非哈希類型報TypeError錯誤dict.clear()
: 刪除字典中的所有元素dict.fromkeys(seq, val=None)
: 以seq中的元素為鍵創建並返回一個字典,val為制定預設值dict.get(key, default=None)
: 返回key的value,如果該鍵不存在返回default指定的值dict.has_key(key)
:判斷字典中是否存在key,建議使用in或not in代替dict.items()
:返回健值對元組的列表dict.keys()
:返回字典中鍵的列表dict.iter*()
: iteritems(), iterkeys(), itervalues()返回迭代子而不是列表dict.pop(key[,default])
:同get(),區別是若key存在,刪除並返回dict[key],若不存在則返回default,未指定值,拋出KeyError異常dict.setdefault(key, default=None)
:同set(),若key存在則返回其value,若key不存在,則dict[key]=defaultdict.update(dict2)
:將dict2中的鍵值對添加到字典dict中,如果有重覆則覆蓋,原字典不存在的條目則添加進來。dict.values()
:返回字典中所有值的列表
第八節 流程式控制制
if else
if語句
Python的if語句類似其他語言。if語句包含一個邏輯表達式,使用表達式比較,在比較的結果的基礎上作用出決定。
if expression: statement
- 註:Python使用縮進作為其語句分組的方法,建議使用4個空格代替縮進。
- 邏輯值(bool)用來表示諸如:對與錯,真與假,空與非空的概念
- 邏輯值包含了兩個值:
- True:表示非空的量(比如:string, tuple, set, dictonary等),所有非零數
- False:表示0,None,空的量等。
- 作用:主要用於判讀語句中,用來判斷
- 一個字元串是否為空的
- 一個運算結果是否為零
- 一個表達式是否可用
else語句
語法
if expression: statement else: statement
如果條件表達式if語句解析為0或false值。else語句是一個可選的語句,並最多只能有一個else語句。
elif語句
語法
if expression: statement elif expression2: statement elif expression3: statement else: statement
elif語句可以讓你檢查多個表達式為真值,並執行一個代碼塊,elif語句是可選的。可以有任意數量的elif。
嵌套的if...elif...else構造
if expression1: statement if expression2: statement else: statement else: statement
使用邏輯運算符and、or、not
if expression1 and expression2: statement else: statement
for迴圈
迴圈是一個結構,導致一個程式重覆一定次數。
條件迴圈也是如此。當條件變為假,迴圈結束。
- for迴圈:
- 在Python for迴圈遍歷序列,如一個列表或一個字元。
for迴圈語法:
for iterating_var in sequence: statements
註:如果一個序列包含一個表達式列表,它是第一個執行。
然後,該序列中的第一項賦值給迭代變數iterating_var。接下來,執行語句塊。列表中的每個項目分配到iterating_var,代碼塊被執行,直到整個序列被耗盡。註:格式遵循代碼塊縮進原則
例子:
for letter in 'python': print 'Current Letter: ', letter fruits=['banana', 'apple', 'mango'] for fruit in fruits: print 'Current fruit: ', fruit
- 迭代序列指數(索引):
遍歷每個項目的另一種方法是由序列本身的偏移指數(索引)
例子
fruits=['banana', 'apple', 'mango'] for index in range(len(fruits)): print 'Current fruit: ', fruits[index]
註:‘迭代’,指重覆執行一個指令。
range
迴圈結構是用於迭代多個項的for語句,迭代形式可以迴圈序列的所有成員。
- range(i,j[,步進值])
- 如果所創建的對象為整數,可以用range
- i為初始數值
- j為終止數值,但不包括在範圍內,步進值為可選參數,不選的話預設是1
- i不選擇的話預設為0
例子:
sum = 0 for num in range(1, 101, 1): sum += num print sum
遍歷字典
dic={'name': 'jack', 'age': 20, 'gender':'male'}
for key in dic:
val = dic[key]
print key,val
for key,val in dic.items():
print key, val
for迴圈控制
for x in range(10):
if x == 1:
pass
if x == 2:
continue
if x == 5:
break;
else
print 'end'
while迴圈
while迴圈,直到表達式變為假。表達的是一個邏輯表達式,必須返回一個true或false值
語法:
while expression: statement
註:遵循代碼塊縮進原則
while x != 'q': x = raw_input('please input something, q for quit: ') if not x: break else: print 'end'