1. 熱身
輸出重定向:path/to/file.py > save.txt
模塊:
import module #without suffix
reload(module)
from myTest import test
dir(myTest)查看已經(jīng)引入模塊的所有屬性
變量類型:
Number,數(shù)字:8。
String,字符串:'test'
List,列表:[1,2,4,5]
Dictionaries,字典:{'food': 'spam', 'taste': 'yum'}
Tuple,元組:(1,'spam', 4, 'U') , 和list類似,但是具有不變性
File文件:myfile = open('eggs', 'r')
其它類型:Sets, types, None, Booleans
?
2.?數(shù)字
除完后約去小數(shù)的運算“//”,求余運算符“%”,冪運算符“**”
位操作:左移“<<”、右移“>>”、按位或“|”、按位與“&”
使用Decimal控制精確的小數(shù)點位數(shù):
from decimal import Decimal
print Decimal('1.0') + Decimal('1.2')
bool:真為1,假為0
和數(shù)字相關(guān)的模塊有:math數(shù)學(xué)模塊、random隨機模塊
“等于”和“是” (== and is) 等于檢查兩個變量是不是相等,而is檢查兩個變量是不是引用同一個對象
?
3. 字符串
字符串可以使用雙引號和單引號
換行和引號等需要使用轉(zhuǎn)義字符來表示
在字符串前面加一個r,這種字符串叫做raw string,表示本字符串不轉(zhuǎn)義
Unicode的字符串,需要在字符串的前面加一個u,或者用unicode函數(shù)
將數(shù)字轉(zhuǎn)換為字符串:Str[7:11:2]
刪除輸入字符串最后的換行 :#sliceTestStr[:-1]
ord函數(shù)將字符轉(zhuǎn)換為ASCII碼,chr函數(shù)則相反,將ASCII碼轉(zhuǎn)換為字符。
print "%s -- %s -- %s" % (42, ?3.14159, [1, 2, 3])
print 'My name is %(name)s and I\'m %(age)s ?years old.' % {'name':'Chen Zhe','age':'23'}
?
4. 列表
列表的乘法,注意并不是每個元素乘以二,而是整個列表被重復(fù)了兩次,重新接合成一個新的列表
testList.append
sort
reverse
testList.extend([7,8,9,10])
pop
del testList[0:4]
?
5. 字典和元組
字典:
取得key對應(yīng)的value :可以使用索引的方式,也可以使用get方法,testDict['name'], testDict.get('name')
testDict.has_key('gender')
testDict.keys()
testDict.values()
testDict.items()
添加(key,value)對 :updateDict = {'skill':'JavaSctipt'} ,testDict.update(updateDict)
dict(name='gaoshou')
dict.fromkeys(['a', 'b'], 0)
元組:
元組與列表十分相似,但是類似字符串和數(shù)字它是不可改變的。
元組和列表的互相轉(zhuǎn)換:
testTupleList = list(testTuple)
ortedTuple = tuple(testTupleList)
數(shù)據(jù)類型大概有三個:
數(shù)字(number) 可以加和乘
序列(sequence) 可以索引、切割和連接(index、slice和concatenation)
映射(mapping) 可以使用key來索引(index)。
6. 文件
testFile = open('cainiao.txt','w'),打開文件的形式,w:write,a:append, r:read, b:binary
testFile.write,按行寫入:testFile.writelines
testFile.close()
testStr = testFile.readline(),testStr = testFile.read()
使用Python的pickle模塊,可以將Python對象直接存儲在文件中,并且可以再以后需要的時候重新恢復(fù)到內(nèi)容中
import pickle
testDict = {'name':'Chen ?Zhe','gender':'male'}
pickle.dump(testDict,testFile)
pickle.load(testFile)
?
7. 基本語句
Python的語句不需要用分號來結(jié)尾,而是由解釋器按照換行來判斷語句的結(jié)束。一行多個語句的時候是需要分號的。
元組賦值:a,b = 'a','b'
列表賦值:[a,b]=[1,2]
在Python中有+=之類的賦值,但是沒有++和--這類運算符
將Python的輸出流綁定到一個文件上
from sys import stdout
temp = stdout ?#for later use
outputFile = open('out.txt','a')
stdout = outputFile
stdout.write('just a test')
#回復(fù)輸出流
stdout = temp#restore the output stream
print >> outputFile,'changed for a ?little whie\n'
from sys import stderr
print >> stderr,'error!\n'
?
8. if while控制語句
Python的語法結(jié)構(gòu)有一些不同:
代碼塊是不需要使用大括號來括起來的
if,while等等的條件是不需要使用小括號括起來的
但是控制語句都需要添加一個冒號“:”
if語句
if x>50:?
elif x==50:
else:
邏輯運算符:and, or, not
三元運算符:A = Y if X else Z
while語句
while x:?
else:
?
9. for循環(huán)語句
for i in x:
else:
迭代器(iterator)
文件迭代器,讀取文件的最佳實踐:for line in open('test.txt'):
字典迭代器:
testDict = {'name':'Chen Zhe','gender':'male'}
for key in testDict:
有一些函數(shù)可以在支持迭代協(xié)議的對象上運行:sum, any, all, sorted
for i in range(2:8:2): // range產(chǎn)生循環(huán)范圍
使用zip函數(shù)可以把兩個列表合并起來,成為一個元組的列表
enumerate在循環(huán)的同時可以訪問到當前的索引值
for (offset,item) in enumerate(testStr):
?
10. 函數(shù)
使用def定義一個函數(shù)
函數(shù)里使用的變量為局部變量,可以使用global將變量的作用域擴大到文件內(nèi)部
在調(diào)用函數(shù)的過程中可以不使用函數(shù)定義時候的參數(shù)順序,但是一定要指明參數(shù)的名稱:
show(b=1,a=2)
默認參數(shù):def showDefault(a,b=2,c=3):
結(jié)合參數(shù)(#collecting arguments):
在定義函數(shù)的時候可以使用*args指定在函數(shù)中使用元組的形式訪問參數(shù),使用**args來指定按照字典形式來使用參數(shù)
拆解參數(shù)(#unpacking arguments):
args = [1,2,3,4]
showArgsUnpacking(*args)
函數(shù)也可以被當作參數(shù)來傳遞
lambda可以理解為一種小函數(shù),但是它是一個表達式,而不是一個語句
func = lambda x,y:x+y
L = [(lambda x: x**2), (lambda x: x**3), ?(lambda x: x**4)]
map函數(shù)可以接受函數(shù)和列表作為參數(shù),然后返回函數(shù)處理之后的列表:map(函數(shù)名,列表)
generator函數(shù):
def genMul2(N):
? for i in range(N):
? ?yield i * 2
for i in genMul2(5):print i
for循環(huán)、list comprehension 和 map都使用這個迭代器協(xié)議:
testDict = {'name':'Chen ?Zhe','gender':'male'}
testIter = iter(testDict)
testIter.next()
Tips:
函數(shù)內(nèi)變量為局部變量
數(shù)據(jù)類型可更改、不可更改
?
11. 列表推導(dǎo)式
line.rstrip() for line in open('test.txt')
line.rstrip() for line in open('test.txt') if line[0]=='n'
mul2(i) for i in testList
嵌套循環(huán):x*y for x in [1,2,3] for y in ?[1,2,3]
?
12. 模塊
模塊:
import math
print math.__name__
包package:
package內(nèi)必須有一個__init__.py文件,當其它程序import這個package的時候,這個文件會自動運行。
模塊的引用方式:
#from dir1 import test
#import dir1.test as test
使用字符串動態(tài)地引用模塊
modname = "string"
exec "import " + modname
reload
reload是函數(shù),而不是語句。
reload會影響所有使用import的客戶。
reload不會影響已有的from客戶。
隱藏數(shù)據(jù):
在一個模塊中,_xyz、_val等等前面有一個下劃線的變量是不會被from *所引入的。
如果從另外一個角度隱藏數(shù)據(jù),可以在模塊內(nèi)定義一個__all__屬性,__all__ = [“xyz”,”zz”,”zzx”]
當module是被當作頂級代碼運行的時候,它的__name__是__main__。如果是被其它代碼引用的時候則是它自己的名字??梢岳眠@一點寫測試代碼:
if __name__ == '_ _main_ _':
#do something
相對引用:from .spam import name
?
13. 異常處理
異常處理包括:錯誤處理、事件通知、特殊情況處理、退出時的行為、不正常的程序流程。
try:
except NameError:
我們可以自己觸發(fā)異常,例如: raise IndexError
自定義的異常:
class MyException(Exception):pass
try:
? ? #some code here
? ? raise MyException
except MyException:
一個except內(nèi)捕獲多個異常:except (AttributeError, TypeError, SyntaxError):
捕獲所有異常:except:
finally
無論try塊是否拋出異常,永遠執(zhí)行的代碼。通常用來執(zhí)行關(guān)閉文件,斷開服務(wù)器連接的功能等等。
try、except、else
可以在try塊里加入else塊,代碼塊將在沒有異常被拋出的時候執(zhí)行
raise異常、同時添加數(shù)據(jù)
except MyException,data:
斷言assert :
斷言是指期望指定的條件滿足,如果不滿足則拋出AssertionError異常。
with/as
with/as語句主要是為了代替try/finally語句、通常用來做一些善后工作或者是清理現(xiàn)場的工作。
with open('test.txt') as myfile:
? ? for line in myfile:
? ? ? ? #code here
? ? #code here
當with代碼塊結(jié)束之后,文件將會自動關(guān)閉。
歡迎訪問我的博客: www.dzwanli.com.cn?
參考網(wǎng)址:http://www.cainiao8.com/python/basic/python_01_warm_up.html