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 : print 1elif : print 2else: 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 IterablecanIter = 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.pydef 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 efinally: 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 codecswith 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] 官方文档
文章来源:http://www.jianshu.com/p/9380b30cfd05