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] 官方文档