Python筆記
--HANL
都是個人的一些總結,發(fā)到這里記錄一下鸳碧,嘿嘿报强!
python不允許if語句中賦值
比較運算符優(yōu)先邏輯運算符
Python的關鍵要素
- 基本數(shù)據(jù)類型
- 對象引用
- 組合數(shù)據(jù)類型
- 邏輯操作符
- 控制流程語句
- 算數(shù)操作符
- 函數(shù)的創(chuàng)建與調(diào)用
如何獲取使用幫助
HELP:
想獲取某一對象支持使用的屬性和方法:dir()
某方法的具體使用幫助:help()
獲取可調(diào)用的對象的文檔字串:print obj.__doc__
變量名命名規(guī)則:
命名慣例:
以單一下劃線開頭變量名(_x)不會被from module import *語句導入
前后有下劃線的變量名(__x__)是系統(tǒng)定義的變量名,對python解釋器有特殊意義
以兩個下劃線開頭但結尾沒有下劃線的變量名(__x)是類的本地變量
交互模式下爬虱,"_"用于保存最后表達式的結果
>>> 1+1
2
>>> print _
2
注意:變量名沒有類型隶债,對象才有
組合類型
序列類型
列表是可變序列,元組是不可變序列
列表:使用[]定義 ["This","is","a","pig"]
可變對象跑筝,原處可變死讹,
元表:使用()定義 ("This,"is")
不可變對象
字符串也屬于序列
邏輯運算
身份操作符
is:判斷左端的對象引用是否相同于右端對象引用;也可以與None進行
In [16]: n = "jerry"
In [19]: y = "jerry"
In [20]: n is y
Out[20]: True
成員操作符
in或not in:測試成員關系
函數(shù)的創(chuàng)建與定義
使用def語句定義函數(shù)
def functionName(arguments):
suite
ps:
def printName(name):
print name
調(diào)用:
>>>printName('Jerry')
Jerry
callable() 可用于測試函數(shù)是否可以調(diào)用
每個python函數(shù)都有一個返回值曲梗,默認為None赞警,也可以使用“return value”明確定義返回值
def語句會創(chuàng)建一個函數(shù)對象,并同時創(chuàng)建一個指向函數(shù)的對象引用
內(nèi)置函數(shù)
dir(__builtin__) 查看內(nèi)置函數(shù)
dir(),id(),type(),str(),help()
Python編程基礎與編程風格
1.語句和語法
#:注釋虏两,可從一行的多個地方開始
\:續(xù)行
''': 也可做續(xù)行愧旦, 閉合操作符,單一語句跨行定罢,多行注釋
同一行放置多個語句笤虫,使用分號作為分割符
2.模塊
每一個Python腳本文件都可以被當成是一個模塊;
模塊里的代碼可以是一段直接智行的腳本引颈,也可以是一些類似庫函數(shù)的代碼從而可以由別的模塊執(zhí)行導入(import)耕皮。
3.標識符
標識符是計算機語言中允許作為名字的有效集合
4.編程風格
注釋:既不能缺少注釋,亦要避免過度注釋
文檔:Python允許通過__doc__動態(tài)獲得文檔子串
標識符:要做到見名知義蝙场,英文全拼
5.命名慣例
以單一下劃線開頭變量名(_x)不會被from module import *語句導入
前后有下劃線的變量名(__x__)是系統(tǒng)定義的變量名凌停,對python解釋器有特殊意義
以兩個下劃線開頭但結尾沒有下劃線的變量名(__x)是類的本地變量
交互模式下,"_"用于保存最后表達式的結果
文件結構
文件結構
Python文件主程序
主程序
無論當前模塊是被別人的模塊導入還是作為腳本直接執(zhí)行售滤,都會智行這部分代碼
注意:所有的模塊都有能執(zhí)行代碼
最高級別的Python語句(沒有縮進的)在模塊被導入時候就會執(zhí)行罚拟,無論是否需要真的需要執(zhí)行
妥當?shù)淖龇ǎ撼四切┱嬲枰獔?zhí)行的代碼以外台诗,所有的功能代碼都通過函數(shù)建立,因此
僅在主程序模塊中編寫大量的頂級執(zhí)行代碼
用于被導入的模塊只應該存在較少的頂級執(zhí)行代碼
__name__指示模塊應該如何被加載
每個模塊都有一個名為__name__的內(nèi)建變量赐俗,此變量值會根據(jù)調(diào)用此模塊的方式發(fā)生變化:
如果模塊是被導入拉队,__name__的值是模塊的名字
如果模塊是直接執(zhí)行,__name__的值是'__main__'
Python對象特性阻逮、比較及核心數(shù)據(jù)類型
Python對象的相關術語
Python程序中保存的所有數(shù)據(jù)都是圍繞對象這個概念展開的
程序中存儲的所有數(shù)據(jù)都是對象
每個對象都有一個身份粱快、一個類型和一個值
對象的類型也稱對象的類別,用于描述對象的內(nèi)部表示及他支持的方法的操作
-
創(chuàng)建特定的類型的對象時叔扼,有時也將該對象稱為該類型的實例
class:自定義類型 type: instance:實例化
-
實例被創(chuàng)建后事哭,其身份和類型就不可改變
如果對象值是可以修改的,則稱為可變對象 如果對象的值不可修改瓜富,則稱為不可變對象
如果某個對象包含對其它對象的引用鳍咱,則將其稱為容器
-
大多數(shù)對象都擁有大量的特有的數(shù)據(jù)屬性和方法
屬性:與對象相關的值 方法:被調(diào)用時將在對象上執(zhí)行某些操作的函數(shù) 使用點 . 運算符可以訪問屬性和方法 /** 類:數(shù)據(jù)和方法 數(shù)據(jù):變量 方法:函數(shù) 類:實例化成對象 CA: IA: IB: **/
對象的身份與類型
Python內(nèi)置函數(shù)id()可返回一個對象的身份,即該對象在內(nèi)存中的位置
is運算符用于比較兩個對象的身份
兩個對象的比較:
1与柑、值比較:對象中的數(shù)據(jù)是否相同谤辜;
2、身份比較:兩個變量名引用的是否為同一對象价捧;
3丑念、類型比較:兩個對象的類型是否相同
type()用于返回一個對象的類型
對象類型本身也是一個對象,稱為對象的類
該對象的定義是唯一的结蟋,且對于某些類型的所有實例都是相同的
所有類型對象都有一個指定的名稱渠欺,可用于執(zhí)行類型檢查,如list椎眯、dict
if a is b:
statements
if a == b:
statemens
if type(a) is type(b):
statemens
Python核心數(shù)據(jù)類型
數(shù)字:int,long胳岂,float编整,complex,bool
字符:str乳丰,unicode
列表:list
字典:dict
元組:tuple
文件:file
其它類型:集合(set)掌测,frozenset,類類型产园,None
其它文件類工具:pipes汞斧,fifos,sockets
類型裝換:
str(),repr()或format():將非字符類型數(shù)據(jù)轉換為字符什燕;
int():轉換為整數(shù)粘勒;
float():轉換為浮點型;
list(str):把str轉換為列表屎即;
tuple(s):將s轉換為元表庙睡;
set(s):將字符串s裝換為集合事富;
frozenset(s):將字符串s轉換為不可變集合;
dict(d):創(chuàng)建字典乘陪;其d必須是(key,value)的元組序列统台;
chr(x):將證書轉換為字符;
ord(x):將字符裝換為整數(shù)值啡邑;
hex(x):將字符裝換為16進制贱勃;
bin(x):2進制;
oct(x):8進制谤逼;
數(shù)字類型:
Python的數(shù)字字面量:布爾型贵扰,整數(shù),浮點型森缠,負數(shù)拔鹰;
True:1
False:0
數(shù)字類型操作
數(shù)字類型操作
序列類型:
字符類型:
字符串字面量:把文本放入單引號、雙引號贵涵、或三引號中列肢;
如果要使用ubicode編碼,則在字符之前使用字符u進行表示
str無法支持國際字符集宾茂,如果想要支持瓷马,需要str = u"hello world"
文檔字符串:(函數(shù)注釋)
模塊、類或函數(shù)的第一條語句是一個字符的話跨晴,
該字符串就成為文檔字符串欧聘,可以使用__doc__屬性引用;
運算符:
索引運算:[i]
切片運算:[i:j]
擴展切片:[i:j:stride]
序列字符串操作
序列操作
不可變序列操作
字符串操作
支持運算:索引端盆、切片怀骤、min()、max()焕妙、len()等
支持操作:對象的自有方法
列表:
容器類型
任意對象的有序集合蒋伦,通過索引訪問其中的元素,可變對象焚鹊,
異構痕届,任意嵌套
支持在原處修改:
1.修改指定的索引元素,
2.或修改指定分片末患,
3.刪除語句研叫,
4.內(nèi)置方法。
l1 + l2:合并兩個列表璧针,返回一個新的列表嚷炉;不會修改原列表
l1 * N:把l1重復N次,返回一個新列表陈莽;
in:成員關系判斷字符渤昌,用法 item in container
not in:obj not in container
列表解析:[]
列表復制方式:
l1 = [1,2,3,4]
l2 = l1
import copy
l2 = copy.deepcopy(11)
l2 = l1[1:]
元組:
表達式符號:()
容器類型
任意對象的有序集合虽抄,通過索引訪問其中的元素,不可變對象独柑,長度固定
異構迈窟,嵌套
常見操作:
定義空元素:t1 = ()
定義多元素:(1,2),(1,)
t1 + t2:
t1 * N:
in: 成員關系判斷
not in:
雖然元組不可改變,但如果元組內(nèi)嵌套了可變類型的元素忌栅,那么此類元素的修改不會返回新元組车酣;
字典:dict
“靈活的內(nèi)置數(shù)據(jù)結構,無序集合索绪,鍵值組合(映射)湖员,類似關聯(lián)數(shù)組,在字典中索引速度非橙鹎快”
字典在其它編程語言中有稱作關聯(lián)數(shù)組或散列表:
通過鍵實現(xiàn)元素存饶锼ぁ;
無序集合唤反;
可變類型容器凳寺;
長度可變;
支持異構彤侍,嵌套肠缨;
{key1:value1,key2:value2,}
{} :空字典
{'x':32,'y':[1,2,3]}
字典復制:d2=d1.copy()
d1.iteritems() 返回一個迭代器對象
>>> dict(zip('zxc','123'))
>>> {'c': '3', 'x': '2', 'z': '1'}
類:數(shù)據(jù)+方法
實例:
3 + 5
3.__add__(5)
列表和字典:
變量名在一個位置,對象在一個位置盏阶,變量名是指向對象的引用
變量名沒有類型晒奕,對象才有類型,
點號運算符:
屬性:數(shù)據(jù)
返回一個數(shù)據(jù)名斟,顯示則要使用print語句
方法:操作 ()
調(diào)用:執(zhí)行一段代碼脑慧,代碼就是函數(shù)對象或者方法對象內(nèi)部的一段代碼
可調(diào)用對象:callable() 函數(shù),類砰盐,方法
定義:
字串:'',"",''' ''',""" """,
列表:[]
元組:()
字典:{}
數(shù)值:
HELP:
想獲取某一對象支持使用的屬性和方法:dir()
某方法的具體使用幫助:help()
獲取可調(diào)用的對象的文檔字串:print obj.__doc__
集合類型詳解
集合:一組無序排列的可哈希的值:
支持集合關系測試
成員關系測試:
in
not in
迭代
不支持:索引漾橙、元素獲取、切片
集合的類型:set(),frozenset()
沒有特定的語法格式楞卡,只能通過工廠函數(shù)創(chuàng)建
集合類型的方法和操作
容器、類型脾歇、對象 特性總結
1.列表元素和字典字面量蒋腮,可以在不使用續(xù)行符的情況下,直接寫在多行上藕各,最后一個元素后面可以使用逗號池摧,空元素不能使用逗號;
2.所有對象都有引用計數(shù)激况,將某對象放進一個新容器中作彤,引用對象會增加膘魄,使用del語句使用刪除操作或某次引用的修改超出當前對象的作用域時,對象的計數(shù)會減少竭讳,sys.getrefcount(s) 檢測引用計數(shù)创葡;
3.列表和字典都支持兩種復制操作,淺復制绢慢、深復制灿渴,深復制可使用copy模塊中的deepcopy()實現(xiàn);
4.Python中的所有對象都是“第一類”胰舆,這意味著使用標識符命名的所有對象都具有相同狀態(tài)骚露,于是,能夠命名的對象都可以直接當數(shù)據(jù)進行處理
5.所有序列都支持迭代缚窿,
6.所有序列都支持的操作和方法:
s[i]
s[i:j]
s[i:j:stride]
len(s)
min(s)
max(s)
sum(s)
all(s)
any(s)
s1 + s2:連接
s1 * N :重復
obj in s1 :成員關系判斷
obj not in s1:
7.可變序列操作:
s1[index] = value :元素賦值
s1[i:j] = t :切片賦值
del s1[index]
del s1[i:j]
del s1[i:j:stride]
Python的表達式和語句:
表達式叫某事棘幸,語句叫做某事
表達式:
語句:
Python中常用的表達式操作符:
x + y,x - y
x * y,x / y,x // y, x % y
邏輯運算:
x or y, x and y,not x
成員關系運算:
x in y, x not in y
對象實例測試:
x is y , x not is y
比較運算:
x < y, x > y, x <= y, x >= y, x == y, x != y,
位運算:
x | y, x & y, x ^ y, x << y, x >> y
一元運算:
-x, +x, ~x
冪運算:
x ** y
索引和分片:
x[i], x[i:j], x[i:j:stride]
調(diào)用:
x(...)
取屬性:
x.attribute
元組:(...)
序列:[...]
字典:{...}
三元選擇表達式:x if y else z
匿名函數(shù):lambda args: expression
生成器函數(shù)發(fā)送協(xié)議:yield x
運算優(yōu)先級:
(...), [...], {...}
s[i], s[i:j]
s.attribute
s(...)
+x, -x, ~x
x ** y
*, /, //, %
+, -
<<, >>
&
^
|
<, <=, >, >=, ==, !=
is, not is
in, not in
not
and
or
lambda
語句:
賦值語句
調(diào)用
print:打印對象
if/elif/else:條件判斷
for/else:序列迭代
while/else:普通循環(huán)
pass:占位符
break:
continue
def:定義函數(shù)
return:返回值
yield:生成器函數(shù)
global:命名空間
raise:觸發(fā)異常
import:
from:模塊屬性訪問
class:類
try/except/finally:撲捉異常
del:刪除應用
assert:調(diào)試檢查
with/as:環(huán)境管理器
賦值語句:
隱式賦值:import, from, def, class, for, 函數(shù)參數(shù)
元組和列表分解賦值:當賦值符號(=)的左側為元組或者列表時倦零,Python會按照位置把右邊的對象和左邊的目標自左而右逐一進行配對误续;個數(shù)不同時會觸發(fā)異常,此時可以切片的方式進行光绕;
多重目標復制:
num1 = num2 = num3 = 100
增強賦值:+=, -=, *=, /=, //=, &=,
Python流程控制
條件測試
if 條件測試表達式
Python中真和假的含義
1.任何非0數(shù)字和非空對象都為真女嘲;
2.數(shù)字0、空對象和特殊對象None均為假诞帐;
3.比較和相等策測試會遞歸的應用與數(shù)據(jù)結構中欣尼;
4.返回值為Ture或False;
if
In [47]: x = 1
In [48]: y = 2
In [49]: if x > y:
...: print "the max number is %d." % x
...: else:
...: print "the max number is %d." % y
...:
the max number is 2.
elif
In [51]: name = "jerry"
In [53]: if name == "Tom":
...: print "It is %s." % name
...: elif name == "hanmeimei":
...: print "It is %s." % name
...: else:
...: print "alien."
...:
alien.
組合條件測試:
X and Y: 與運算
X or Y: 或運算
not X: 非運算
A = X if Y else Z
if Y:
A = X
else
A = Z
expression1 if boolean_expression else expression2
如果滿足boolean_expression則顯示expression1停蕉,否則顯示expression2
(三元表達式)
In [55]: A = 7
In [56]: B = 9
In [57]: max = A if A > B else B
In [58]: print max
9
while:
while bool_expression愕鼓;
while_suite
else:
else_suite
break:跳出最內(nèi)層循環(huán);
continue:跳到所處的最近層循環(huán)的開始處慧起;
pass:占位語句
else代碼塊:循環(huán)正常終止才會執(zhí)行菇晃;如果循環(huán)終止是由break跳出導致的,則else不會執(zhí)行蚓挤;
語法格式擴展:
while bool_expression:
while_suite
if boolean_expression2:break
if boolean_expression3:continue
else:
else_suite
for:
for expression1 in iterable:
for_suite
else:
else_sutie
1.通常磺送,expression是一個單獨的變量,或是一個變量序列灿意,一般以元組的形式給出
2.如果以元組或列表用于expression估灿,則其中的每個數(shù)據(jù)都會拆分到表達式的項,例如
T=[(1,2),(3,4),(5,6),(7,8)]
for (a,b) in T:
print a,b
擴展形式:
for expression in inerable:
for_suite
if boolean_expression2:break
if boolean_expression3:continue
else:
else_suite
編寫循環(huán)到的技巧
for循環(huán)比while循環(huán)執(zhí)行速度快
python提供了兩個內(nèi)置函數(shù)缤剧,用于在for循環(huán)中制定特殊的循環(huán)
range:一次性的返回連續(xù)的整數(shù)列表
xrange:一次產(chǎn)生一個數(shù)據(jù)元素馅袁,相較于range更節(jié)約空間
zip:返回并行的元素元組的列表,長用于在for循環(huán)中遍歷數(shù)個序列
range函數(shù)
非完備遍歷
用于每隔一定的個數(shù)元素挑選一個元素
>>>S= ‘www.knownsec.com’
>>>range(0,len(S),2)
[0, 2, 4, 6, 8, 10, 12, 14]
>>>for i in range(1,len(S),2):
>>> print S[i],
w . n w s c c m
修改元表
>>>L = [1,2,3,4,5]
>>>for i in range(len(L)):L[i]+=1
>>>print L
[2,3,4,5,6]
并行遍歷
并行遍歷
回顧
1.動態(tài)語言
sys.getrefcount() 查看引用次數(shù)
增加對象的引用計數(shù)場景
對象創(chuàng)建時
將對象添加進容器時:類似list.append()
當對象被當做參數(shù)傳遞給函數(shù)時
為對象創(chuàng)建另外變量名
減少引用技數(shù):
引用次對象的變量名被顯示銷毀:del x
給引用次對象的某變量名重新賦值
從容器中移除對象時荒辕,類似list.pop()
容器本身被銷毀
2.if
if boolean_expression:
...
elif boolean_expresssion:
...
else:
...
2.while
while boolean_expression:
while_suite
if boolean_expression2: contiune
if boolean_expression3: break
else:
else_suite
4.for
for expression in object:
for_suite
"""if boolean_expression2: contiune
if boolean_expression3: break
else:
else_suite"""可省
Python迭代
迭代:重復做一件事
iterable(可迭代)對象
支持每次返回自己所包含的一個成員對象
對象實現(xiàn)了__iter__方法
序列類型如:list汗销,str犹褒,tuple
非序列類型:dict,file
用戶自定義的一些包含了__iter__()或__getitem__()方法的類