1.數據類型
整數(int):1,-100
浮點數(float):1.23
字符串(str):'abc',"xyz"
布爾值(bool):True、False
空值:None
2.變量和常量
變量定義格式:變量名=值,示例:checked=True
常量定義格式:常量名=值,示例:PI=3.14
3.字符串與編碼
- 字符編碼
ASCII:一個字節編碼
Unicode:兩個字節編碼
UTF-8:可變長編碼
計算機內存統一使用Unicode編碼,保存在磁盤一般使用UTF-8編碼。所以磁盤數據讀取到內存,內存數據寫入到磁盤就涉及到unicode與UTF-8之間的轉換。
- python中的字符串
python中的字符串支持ASCII和Unicode編碼,unicode編碼的字符串使用u"字符串內容"表示。
unicode轉UTF-8:u"中文".encode("utf-8")
UTF-8轉unicode:"\xe4\xb8\xad\xe6\x96\x87".decode("utf-8")
- 注意事項
[1] 文件頭注明編碼:# -*- coding: utf-8 -*-
[2] 源碼文件使用UTF-8 without BOM編碼保存
[3] 中文字符串賦值時使用unicode編碼
4.復合數據類型
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]
取索引號:keywords.index("gis")
排序:keywords.sort()
倒排序:keywords.reverse()
是否存在指定元素:"gis" in keywords
- list和tuple的區別
list中元素可變。
tuple中元素不可變。 - 切片操作
用來替代循環語句。
keywords[起始索引號:結束索引號:步長]
不含結束索引號的元素。
4.2.dict
字典是鍵值對集合
- 定義
attrs = {"id":1,"type":"point"}
- 基本操作
訪問:atts["id"]
或者atts.get("id")
刪除:atts.pop("id")
刪除:del atts["id"]
所有key:atts.keys()
4.3.set
集合是一個無序不重復元素的集。
- 定義
方式1:uValues = set("a","b","c")
方式2:uValues ={"a", "b", "c"}
- 基本操作
添加:uValues.add("d")
刪除:uValues.remove("b")
刪除重復元素:uValues = set([1,2,2,3,4])
5.數據類型轉換
轉整型:int(value)
轉浮點型:float(value)
轉字符串:str(value)
轉unicode:unicode(value)
轉bool:bool(value)
6.流程控制語句
- if語句
if <條件1>:
print 1
elif <條件2>:
print 2
else:
print 3
- for語句
for x in 序列:
print x
- while語句
while 條件:
print 執行
- break和continue語句
- pass語句
占位符
7.高級特性
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()
- 判斷對象是否可以迭代
from collections import Iterable
canIter = isinstance(obj, Iterable)
7.2.列表推導式
用于快速生成列表。
- 方式1:
[x*x for x in range(0,20)]
- 方式2:
[x*x for x in range(0,20) if x%2==0]
集合推導式:s = {x for x in "abracsdasd" if x not in "abc"}
字典推導式:d = {x: x**2 for x in (2,4,6)}
7.3.生成器
列表推導式生成的列表占用內存,生成器生成的列表在調用next時生成。
- 方式1
將列表推導式中的[]更改為()即可。
a = (x*x for x in range(0,20))
a.next()
- yield關鍵字
在需要返回函數的地方使用yield關鍵字。
8.函數
- 函數定義
def func_name(arg1):
if arg1>10:
return arg1:
return 0
- 默認參數
def power(x, n=2):
s =1
while n>0:
n = n-1
s = s *x
return s
默認參數需要使用不可變對象,否則會出現邏輯錯誤。
- 可變參數
def calc(*numbers):
<函數體>
可變參數接收的是tuple類型。
- 函數參數
函數式編程:允許將函數作為參數。
def add(x,y,f):
return f(x)+f(y)
f是函數
- map()函數
map()函數接收兩個參數,一個是函數,一個是序列,map將傳入的函數依次作用到序列的每個元素,并把結果作為新的list返回。
效果類似:map(f,[1,2,3]) = [f(1),f(2),f(3)]
- reduce()函數
reduce把一個函數作用在一個序列[x1, x2, x3...]上,這個函數必須接收兩個參數,reduce把結果繼續和序列的下一個元素做累積計算。
效果類似:reduce(f,[1,2,3]) = f(f(1,2),3)
- filter()函數
filter()函數接收兩個參數,一個函數,一個序列,filter將傳入的函數依次作用于序列的每個元素,并只保留結果中是True的。 - sorted()函數
支持自定義的排序函數作為參數。 - lambda表達式
定義格式:lambda a,b: a+b
- 其他常用函數
dir():顯示模塊定義
len():返回長度
type():返回對象的類型
isinstance():檢驗對象類型
range():生成數字序列
help():查詢幫助
9.注釋
#:單行注釋
'''…''':多行注釋
"""…""":doc注釋,在函數名之后的注釋。多行注釋時,第二行應該空出來。
def funcname():
"""函數簡介
函數詳情。
"""
pass
10.模塊和包
- 模塊
模塊是一個單獨的py文件,模塊名即為文件名。
# fibo.py
def fib(n):
pass
- 模塊導入
方式1:import語句
import fibo
#調用
fibo.fib(10)
方式2:from 模塊 import 模塊函數
from fibo import fib
#調用
fib(10)
-
name
模塊執行:在模塊中增加name判斷。
if __name__ == "__main__":
#調用模塊定義的內容
- 作用域
私有函數約定使用__開頭來命名函數。 - 第三方模塊
使用pip安裝。 - 模塊搜索路徑
模塊搜索路徑定義在sys.path中。可動態添加:sys.path.append("newpath")
,或者定義環境變量PYTHONPATH。 - 包
python使用文件夾定義包,文件夾中必須包含__init__.py
,該文件內容可為空,或者定義__all__
變量。
__all__
定義了可以導入的模塊列表:
__all__ = ["point","line"]
11.類
- 類定義與實例化
類定義:
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)
類的實例化:lisa = Person("Lisa",25)
類中的方法第一個參數是self。
- 私有屬性定義
約定私有屬性使用一個下劃線_開頭命名。 - @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語句
try:
<執行>
except ValueError as e:
<異常處理>
finally:
<執行完的處理>
- 自定義異常類
直接或間接繼承Exception類。
class MyError(Exception):
#覆蓋父類
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
- 錯誤記錄與調試
使用logging模塊,記錄日志信息。
13. 編碼原則
- 使用4個空格縮進
- 使用文檔注釋
- 類名使用駝峰命名,函數和方法使用小寫和下劃線。類中的方法第一個參數使用self。
13.IO編程
13.1.文件操作
- 讀取文件
基本流程:打開-->讀取-->關閉。
try:
f = open("c:\\text.txt","r")
print f.read()
except IOError,e:
print e
finally:
if f:
f.close()
簡寫方式,由python自動調用close()方法:
with open("c:\\text.txt","r") as f:
print f.read()
- 讀取模式
r(只讀)、b(二進制)、w(寫) 、a(追加)、r+(讀寫)
f = open("c:\img.jpg", "rb")
f.read()
windows平臺上讀取文本文件時,會在行尾自動添加行結束符,對JPEG之類文件的讀取會破壞結構,建議一切以二進制打開。
- 字符編碼
讀取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()
推薦方法,調用codecs模塊:
import codecs
with codecs.open("c:\\gbktext.txt","r","gbk") as f:
f.read()
一般原則:內部使用unicode編碼,外部使用各自編碼。
- 常用方法
read()
:一次性讀取到內存
read(size)
:讀取指定字節的內容
readline()
:讀取一行
readlines()
:讀取所有行
write()
:寫入
13.2.目錄操作
- os模塊
讀取所有環境變量:os.environ
讀取指定環境變量:os.getenv("PATH")
讀取當前目錄的絕對路徑:os.path.abspath(".")
路徑拼接:os.path.join("c:\\demo","text.txt")
創建目錄:os.mkdir("c:\\demo")
刪除目錄:os.rmdir("c:\\demo")
拆分路徑和文件:os.path.split("c:\\demo\\text.txt")
拆分擴展名: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標準庫
- 操作系統接口:os和shutil
- 命令行參數:sys.argv
- 正則表達式:re
- 數學:math和random
- 日期和時間:datetime、time
- 數據壓縮:zlib、gzip、bz2、zipfile、tarfile
- xml操作:xml.dom、xml.sax
- json操作:json
- 進程與線程:multiprocessing、Queue、Pipes、Threading
- 日志:logging
參考資料
[1] Python2.7教程
[2] Python入門指南
[3] Python2.7字符編碼
[4] 官方文檔