1.數(shù)據(jù)類型
整數(shù)(int):1,-100
浮點(diǎn)數(shù)(float):1.23
字符串(str):'abc'如捅,"xyz"
布爾值(bool):True镜遣、False
空值:None
2.變量和常量
變量定義格式:變量名=值悲关,示例:checked=True
常量定義格式:常量名=值寓辱,示例:PI=3.14
3.字符串與編碼
- 字符編碼
ASCII:一個(gè)字節(jié)編碼
Unicode:兩個(gè)字節(jié)編碼
UTF-8:可變長(zhǎng)編碼
計(jì)算機(jī)內(nèi)存統(tǒng)一使用Unicode編碼讶舰,保存在磁盤一般使用UTF-8編碼。所以磁盤數(shù)據(jù)讀取到內(nèi)存般甲,內(nèi)存數(shù)據(jù)寫入到磁盤就涉及到unicode與UTF-8之間的轉(zhuǎn)換敷存。
- python中的字符串
python中的字符串支持ASCII和Unicode編碼锚烦,unicode編碼的字符串使用u"字符串內(nèi)容"表示涮俄。
unicode轉(zhuǎn)UTF-8:u"中文".encode("utf-8")
UTF-8轉(zhuǎn)unicode:"\xe4\xb8\xad\xe6\x96\x87".decode("utf-8")
- 注意事項(xiàng)
[1] 文件頭注明編碼:# -*- coding: utf-8 -*-
[2] 源碼文件使用UTF-8 without BOM編碼保存
[3] 中文字符串賦值時(shí)使用unicode編碼
4.復(fù)合數(shù)據(jù)類型
4.1.list和tuple
- 定義格式
list列表:keywords = ["china","map","gis"]
tuple元組:keywords = ("china","map","gis")
- list的基本操作
訪問:keywords[0]
增加:keywords.append("service")
插入:keywords.insert(1,"extent")
刪除:keywords.pop()
或keywords.pop(2)
刪除:keywords.remove("china")
批量刪除:del keywords[:2]
取索引號(hào):keywords.index("gis")
排序:keywords.sort()
倒排序:keywords.reverse()
是否存在指定元素:"gis" in keywords
- list和tuple的區(qū)別
list中元素可變孕锄。
tuple中元素不可變。 - 切片操作
用來替代循環(huán)語(yǔ)句宦芦。
keywords[起始索引號(hào):結(jié)束索引號(hào):步長(zhǎng)]
不含結(jié)束索引號(hào)的元素调卑。
4.2.dict
字典是鍵值對(duì)集合
- 定義
attrs = {"id":1,"type":"point"}
- 基本操作
訪問:atts["id"]
或者atts.get("id")
刪除:atts.pop("id")
刪除:del atts["id"]
所有key:atts.keys()
4.3.set
集合是一個(gè)無序不重復(fù)元素的集恬涧。
- 定義
方式1:uValues = set("a","b","c")
方式2:uValues ={"a", "b", "c"}
- 基本操作
添加:uValues.add("d")
刪除:uValues.remove("b")
刪除重復(fù)元素:uValues = set([1,2,2,3,4])
5.數(shù)據(jù)類型轉(zhuǎn)換
轉(zhuǎn)整型:int(value)
轉(zhuǎn)浮點(diǎn)型:float(value)
轉(zhuǎn)字符串:str(value)
轉(zhuǎn)unicode:unicode(value)
轉(zhuǎn)bool:bool(value)
6.流程控制語(yǔ)句
- if語(yǔ)句
if <條件1>:
print 1
elif <條件2>:
print 2
else:
print 3
- for語(yǔ)句
for x in 序列:
print x
- while語(yǔ)句
while 條件:
print 執(zhí)行
- break和continue語(yǔ)句
- pass語(yǔ)句
占位符
7.高級(jí)特性
7.1.迭代
- list和tuple類型的迭代
迭代value:for … in
迭代索引和value:for i, value in enumerate(list)
- dict類型的迭代
迭代key:for key in dict
迭代value:for value in dict.itervalues()
迭代key和value:for key ,value in dict.iteritems()
- 判斷對(duì)象是否可以迭代
from collections import Iterable
canIter = isinstance(obj, Iterable)
7.2.列表推導(dǎo)式
用于快速生成列表。
- 方式1:
[x*x for x in range(0,20)]
- 方式2:
[x*x for x in range(0,20) if x%2==0]
集合推導(dǎo)式:s = {x for x in "abracsdasd" if x not in "abc"}
字典推導(dǎo)式:d = {x: x**2 for x in (2,4,6)}
7.3.生成器
列表推導(dǎo)式生成的列表占用內(nèi)存现使,生成器生成的列表在調(diào)用next時(shí)生成碳锈。
- 方式1
將列表推導(dǎo)式中的[]更改為()即可售碳。
a = (x*x for x in range(0,20))
a.next()
- yield關(guān)鍵字
在需要返回函數(shù)的地方使用yield關(guān)鍵字绞呈。
8.函數(shù)
- 函數(shù)定義
def func_name(arg1):
if arg1>10:
return arg1:
return 0
- 默認(rèn)參數(shù)
def power(x, n=2):
s =1
while n>0:
n = n-1
s = s *x
return s
默認(rèn)參數(shù)需要使用不可變對(duì)象佃声,否則會(huì)出現(xiàn)邏輯錯(cuò)誤。
- 可變參數(shù)
def calc(*numbers):
<函數(shù)體>
可變參數(shù)接收的是tuple類型十拣。
- 函數(shù)參數(shù)
函數(shù)式編程:允許將函數(shù)作為參數(shù)夭问。
def add(x,y,f):
return f(x)+f(y)
f是函數(shù)
- map()函數(shù)
map()函數(shù)接收兩個(gè)參數(shù)缰趋,一個(gè)是函數(shù)埠胖,一個(gè)是序列直撤,map將傳入的函數(shù)依次作用到序列的每個(gè)元素谋竖,并把結(jié)果作為新的list返回。
效果類似:map(f,[1,2,3]) = [f(1),f(2),f(3)]
- reduce()函數(shù)
reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3...]上锤悄,這個(gè)函數(shù)必須接收兩個(gè)參數(shù)零聚,reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算隶症。
效果類似:reduce(f,[1,2,3]) = f(f(1,2),3)
- filter()函數(shù)
filter()函數(shù)接收兩個(gè)參數(shù)蚂会,一個(gè)函數(shù)胁住,一個(gè)序列刊咳,filter將傳入的函數(shù)依次作用于序列的每個(gè)元素娱挨,并只保留結(jié)果中是True的让蕾。 - sorted()函數(shù)
支持自定義的排序函數(shù)作為參數(shù)探孝。 - lambda表達(dá)式
定義格式:lambda a,b: a+b
- 其他常用函數(shù)
dir():顯示模塊定義
len():返回長(zhǎng)度
type():返回對(duì)象的類型
isinstance():檢驗(yàn)對(duì)象類型
range():生成數(shù)字序列
help():查詢幫助
9.注釋
#:?jiǎn)涡凶⑨?br>
'''…''':多行注釋
"""…""":doc注釋顿颅,在函數(shù)名之后的注釋粱腻。多行注釋時(shí),第二行應(yīng)該空出來捞慌。
def funcname():
"""函數(shù)簡(jiǎn)介
函數(shù)詳情啸澡。
"""
pass
10.模塊和包
- 模塊
模塊是一個(gè)單獨(dú)的py文件氮帐,模塊名即為文件名。
# fibo.py
def fib(n):
pass
- 模塊導(dǎo)入
方式1:import語(yǔ)句
import fibo
#調(diào)用
fibo.fib(10)
方式2:from 模塊 import 模塊函數(shù)
from fibo import fib
#調(diào)用
fib(10)
-
name
模塊執(zhí)行:在模塊中增加name判斷皮服。
if __name__ == "__main__":
#調(diào)用模塊定義的內(nèi)容
- 作用域
私有函數(shù)約定使用__開頭來命名函數(shù)龄广。 - 第三方模塊
使用pip安裝蜀细。 - 模塊搜索路徑
模塊搜索路徑定義在sys.path中奠衔」榻铮可動(dòng)態(tài)添加:sys.path.append("newpath")
脏里,或者定義環(huán)境變量PYTHONPATH迫横。 - 包
python使用文件夾定義包矾踱,文件夾中必須包含__init__.py
呛讲,該文件內(nèi)容可為空贝搁,或者定義__all__
變量雷逆。
__all__
定義了可以導(dǎo)入的模塊列表:
__all__ = ["point","line"]
11.類
- 類定義與實(shí)例化
類定義:
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def print_info(self):
print "%s,%s" % (self.name,self.age)
類的實(shí)例化:lisa = Person("Lisa",25)
類中的方法第一個(gè)參數(shù)是self坦袍。
- 私有屬性定義
約定私有屬性使用一個(gè)下劃線_開頭命名等太。 - @property定義屬性get和set方法
class Student(object):
@property
def name(self):
return self.__birth
@name.setter
def name(self, value):
self.__name = value
- 可變類型的屬性定義
class Mapping:
def __init__(self,value):
self.value = value
self.items_list = []
- 多繼承
class subClass(parent1,parent2):
pass
12.異常處理
- try語(yǔ)句
try:
<執(zhí)行>
except ValueError as e:
<異常處理>
finally:
<執(zhí)行完的處理>
- 自定義異常類
直接或間接繼承Exception類奠宜。
class MyError(Exception):
#覆蓋父類
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
- 錯(cuò)誤記錄與調(diào)試
使用logging模塊压真,記錄日志信息滴肿。
13. 編碼原則
- 使用4個(gè)空格縮進(jìn)
- 使用文檔注釋
- 類名使用駝峰命名佃迄,函數(shù)和方法使用小寫和下劃線堆缘。類中的方法第一個(gè)參數(shù)使用self吼肥。
13.IO編程
13.1.文件操作
- 讀取文件
基本流程:打開-->讀取-->關(guān)閉麻车。
try:
f = open("c:\\text.txt","r")
print f.read()
except IOError,e:
print e
finally:
if f:
f.close()
簡(jiǎn)寫方式动猬,由python自動(dòng)調(diào)用close()方法:
with open("c:\\text.txt","r") as f:
print f.read()
- 讀取模式
r(只讀)、b(二進(jìn)制)、w(寫) 臂痕、a(追加)、r+(讀寫)
f = open("c:\img.jpg", "rb")
f.read()
windows平臺(tái)上讀取文本文件時(shí)澡绩,會(huì)在行尾自動(dòng)添加行結(jié)束符俺附,對(duì)JPEG之類文件的讀取會(huì)破壞結(jié)構(gòu)步鉴,建議一切以二進(jìn)制打開璃哟。
- 字符編碼
讀取GBK編碼的文本文件:
f = open("c:\\gbktext.txt","rb")
u = f.read().decode("gbk")
print u
讀取utf-8編碼的文本文件:
f = open("c:\\uft8text.txt","rb")
u = f.read().decode("utf-8")
print u
寫入utf-8編碼的文本文件:
f = open("c:\\uft8text.txt","w")
f.write(u"新增加".encode("utf-8"))
f.close()
推薦方法阳似,調(diào)用codecs模塊:
import codecs
with codecs.open("c:\\gbktext.txt","r","gbk") as f:
f.read()
一般原則:內(nèi)部使用unicode編碼,外部使用各自編碼铐伴。
- 常用方法
read()
:一次性讀取到內(nèi)存
read(size)
:讀取指定字節(jié)的內(nèi)容
readline()
:讀取一行
readlines()
:讀取所有行
write()
:寫入
13.2.目錄操作
- os模塊
讀取所有環(huán)境變量:os.environ
讀取指定環(huán)境變量:os.getenv("PATH")
讀取當(dāng)前目錄的絕對(duì)路徑:os.path.abspath(".")
路徑拼接:os.path.join("c:\\demo","text.txt")
創(chuàng)建目錄:os.mkdir("c:\\demo")
刪除目錄:os.rmdir("c:\\demo")
拆分路徑和文件:os.path.split("c:\\demo\\text.txt")
拆分?jǐn)U展名:os.path.splitext("c:\\demo\\text.txt")
文件重命名:os.rename("old.txt","new.txt")
刪除文件:os.remove("new.txt")
目錄判斷:os.path.isdir(path)
文件判斷:os.path.isfile(path)
14.常用的Python標(biāo)準(zhǔn)庫(kù)
- 操作系統(tǒng)接口:os和shutil
- 命令行參數(shù):sys.argv
- 正則表達(dá)式:re
- 數(shù)學(xué):math和random
- 日期和時(shí)間:datetime撮奏、time
- 數(shù)據(jù)壓縮:zlib、gzip盛杰、bz2挽荡、zipfile、tarfile
- xml操作:xml.dom即供、xml.sax
- json操作:json
- 進(jìn)程與線程:multiprocessing定拟、Queue、Pipes逗嫡、Threading
- 日志:logging
參考資料
[1] Python2.7教程
[2] Python入門指南
[3] Python2.7字符編碼
[4] 官方文檔