語言說明##
優(yōu)勢:語法簡潔
劣勢:運行效率低、代碼不能加密
適用:網(wǎng)站W(wǎng)EB應用、日常小工具批量工具衙耕、模塊連接工具
編寫方式##
命令行:使用python可進入交互式編輯模式(>>>)
py文件:同樣使用python編譯
輸入輸出##
print和raw_input(),raw_input是函數(shù)
a = raw_input()
print a
可以在調(diào)用raw_input函數(shù)的時候添加字符串參數(shù),
這個參數(shù)會作為輸入時的提示顯示在輸出設備上
數(shù)據(jù)類型##
整數(shù)
a = 5
浮點
b = 2.5
字符串
c = "abcd" # 雙引
d = 'dcba' # 單引
e = """
ab
cd
""" # 折行
f = "\\\n\\" # 轉(zhuǎn)義
g = r"\\\n\\" # 不對轉(zhuǎn)義做處理
h = u"你好世界"# 用于處理中文的unicode
布爾
m = True
n = True and False # 邏輯組合:and缤沦、or、not
空
o = None
注意文件中包含中文易稠,編譯會不通過缸废,需要在文件頂部追加
# _*_ coding: utf-8 _*_
以表示該文件用UTF8編碼,也正因為如此缩多,中文字符串不再需要以unicode編碼保存呆奕,因為UTF8本身就是支持中文的
強制類型轉(zhuǎn)換
python使用一組全局函數(shù)來做類型的強制轉(zhuǎn)換
int(x [,base ]) #將x轉(zhuǎn)換為一個整數(shù)
long(x [,base ]) #將x轉(zhuǎn)換為一個長整數(shù)
float(x ) #將x轉(zhuǎn)換到一個浮點數(shù)
complex(real [,imag ]) #創(chuàng)建一個復數(shù)
str(x ) #將對象 x 轉(zhuǎn)換為字符串
repr(x ) #將對象 x 轉(zhuǎn)換為表達式字符串
eval(str ) #用來計算在字符串中的有效Python表達式,并返回一個對象
tuple(s ) #將序列 s 轉(zhuǎn)換為一個元組
list(s ) #將序列 s 轉(zhuǎn)換為一個列表
chr(x ) #將一個整數(shù)轉(zhuǎn)換為一個字符
unichr(x ) #將一個整數(shù)轉(zhuǎn)換為Unicode字符
ord(x ) #將一個字符轉(zhuǎn)換為它的整數(shù)值
hex(x ) #將一個整數(shù)轉(zhuǎn)換為一個十六進制字符串
oct(x ) #將一個整數(shù)轉(zhuǎn)換為一個八進制字符串
文件開頭注釋##
用于在Linux/OS X系統(tǒng)中,表示這是一個Python可執(zhí)行文件
#!/usr/bin/env python
字符串操作##
格式化字符串
類似于C語言的printf調(diào)用衬吆,只不過不是輸出梁钾,只是返回字符串
a = "%f"%15.1 # a 等于 "15.1"
b = "%d - %d = %d"%(2, 3, 2 - 3) # b 等于 "2 - 3 = -1"
連接字符串
python使用逗號連接字符串,逗號會變成空格
print "Hello","World"
s = "opteacher"
print "Hello",s
js用+逊抡,php用.
列表##
list就是數(shù)組姆泻,tuple是常數(shù)組
ary = [1, 2, 3]
print ary
cary = (4, 5, 6)
print cary
# 因為python是類型不敏感的,所以列表中可以包含不同類型的值
tt = [1, 1.5, True, "abcd"]
print tt
常數(shù)組tuple指的是其中元素的指向不能被改變冒嫡,但元素本身可以變化
列表操作
ary = []
ary.append(1) # 增
ary.pop() # 刪
# 不指定下標拇勃,就從最后一個元素刪起
ary[0] = 2 # 改
print ary[0] # 查
#可以從最后一個元素開始查
# -1 => 最后一個
# -2 => 倒數(shù)第二個
# ...
print ary[-1]
如果tuple只有一個元素,寫法會和括號運算符沖突
cary = (1) => cary = 1
為了防止這種情況發(fā)生孝凌,可以在元素后面加個逗號方咆,以明確表示這是一個
cary = (1,)
判斷##
沒什么可說的
循環(huán)##
for
for循環(huán)作用于可迭代對象
ary = [1, 2, 3, 4]
for itm in ary:
print itm
使用range函數(shù)生成順序列表,配合for
for i in range(0, 11):#i: 0 -> 10
print i
range函數(shù)的第三個參數(shù)可以指定其步進
for i in range(1, 11, 2): # 打印奇數(shù)
print i
用for循環(huán)可以生成復雜列表蟀架,稱之為【列表生成式】
ary = [i*i for i in range(1, 5)]
print ary
甚至可以和判斷做配合
ary = [i + 1 for i in range(1, 10, 2) if i != 5]
print ary
判斷一個對象是否是可迭代對象(能被for遍歷)
print isinstance(ary, Iterable)
while
沒什么可說的
KV表和枚舉集##
dict
python中的KV表成為dict瓣赂,跟json差不多
m = { "a": 10, "b": 20, "c": 50 }
m["d"] = 80 # 增
m.pop("b") # 刪
m["a"] = 5 # 改
#a被覆蓋
print m["c"] # 查
為了防止訪問不存在的key,使用get函數(shù)查詢
print m["e"] # Exception
print m.get("e")
可以用in判斷存不存在這個key
print "e" in m
遍歷
#(KEY)
for k in m:
print k,"->",m[k]
#(VALUE)
for v in m.values():
print v
#(ITEM)
for k, v in m.items():
print k,"->",v
set
枚舉集片拍,多用于存儲不同的值
s = ([0, 1, 2, 3])
m.add(8) # 增
m.remove(2) # 刪
# 改
#改不了煌集,只能刪了加
for itm in s:# 查
print itm
# 遍歷
可變和不可變對象##
一般的固有類型都是不可變對象,修改往往是改變指向捌省。而像list之類的苫纤,修改是直接作用在list對象上的
函數(shù)##
用def定義
def add(a, b): return a + b
如果沒有函數(shù)體,可以填寫pass
def empty(): pass
返回多個值
def mulRet(): return 5, 10
a, b = mulRet()
#如果用一個變量接受多返回值的函數(shù)調(diào)用
#會發(fā)現(xiàn)其實多返回值的函數(shù)返回的是一個tuple
r = mulRet()
print r
可以帶默認參數(shù)
def sub(a, b = 0): return a - b
print sub(5)
def b(l = []):
l.append("A")
L = []
b(L)
print L
b(L)
print L
#第二次打印的L為多少?
可變參數(shù)(用指針接受多參數(shù)【開玩笑-_-+】)
def c(*args):
for t in args:
print t
c(1, 2, "abcd")
#可變參數(shù)接受的是一個tuple
#關鍵字參數(shù)(其實就是給出KEY和VALUE卷拘,在函數(shù)內(nèi)部組成一個dict)
def d(**args):
for k in args:
print k,"->",args[k]
d(a=3, b=4)
注意:默認參數(shù)最好填寫不可變常值喊废,因為可變的會
被記錄到參數(shù)變量中,在下一次調(diào)用的時候發(fā)生錯誤
遞歸函數(shù)##
自己調(diào)用自己恭金,沒什么好說的
集合切片##
取子集
#a[from:to[:step]]
ary = [0, 1, 2, 3, 4, 5]
print ary[1, 3]
#不指定from操禀,則默認從0開始
#不指定to,則默認取到最后一個元素
#也可以用負數(shù)下標(但取只能正向群嵬取)
print ary[-2:-1]
集合迭代##
遍歷的方式
list可以使用enumerate()函數(shù)獲取列表索引和值得映射表
ary = [0, 1, 2, 3, 4]
for idx, val in enumerate(ary):
print idx,"->",val
#這里enumerate函數(shù)返回的就是一個迭代器
跟list一樣颓屑,dict也有一組迭代器用于遍歷
map = { "a": 0, "b": 1, "c": 2 }
for val in map.itervalues():
print val
for k, v in map.iteritems():
print k,"->",v
跟values()和items()不同,iterXXX()函數(shù)不會為for循環(huán)從新構造集合耿焊,而是在迭代器的基礎上做遍歷
生成器##
跟迭代器一樣揪惦,只不過元素需要通過調(diào)用next函數(shù)一個個被提取出來
簡單生成器跟定義列表生成式相似
g = (x*x for x in range(1, 5))
for i in g:
print i
生成器函數(shù)
def g(max):
i = 0
while i <= max:
yield i
i = i + 1#python居然沒有自加自減
for i in g(6):
print i