Python 开发过程中一些基础点汇总
基础知识
查看帮助
在命令窗口执行:
# 帮助
help(<>)
# 获取对象的所有属性和方法
dir(<>)
unicode
- python中,
u''
表示unicode
- unicode 用两个字节表示一个字符,存纯英文会浪费,于是出现可变长的UTF-8。UTF-8中,英文占一个字节,汉字占三个字节
- unicode转换成utf-8:
u'我'.encode('utf-8')
-> '\xe6\x88\x91'
- utf-8转换成unicode:
'\xe6\x88\x91'.decode('utf-8')
-> u'\u6211'
- 当python源码中包含中文时,要添加文件编码如下:
# -*- coding: UTF-8 -*- 或者 #coding=utf-8
常用库总结
标准库
- os
- os.name 字符串指示你正在使用的平台。比如对于Windows,它是’nt’,而对于Linux/Unix 用户,它是’posix’。
- os.getcwd()函数得到当前工作目录,即当前Python 脚本工作的目录路径。
- os.getenv()和os.putenv()函数分别用来读取和设置环境变量。
- os.listdir()返回指定目录下的所有文件和目录名。
- os.remove()函数用来删除一个文件。
- os.system()函数用来运行shell 命令。
- sys
- sys.argv 程序的入口参数,是一个列表
- sys.path 装载模块的搜索路径,是一个列表
- sys.version python 的版本,是一个string
- sys.exit(status) 退出程序,是一个函数
- time
- time.sleep(n) 休息n 秒,可以是小数
- time.time() 返回一个浮点数,从
1970-1-1 00:00:000
到当前绝对时间的秒数,还有6 位的小数
- time.localtime(second) 返回一个元组,如果没有second,就使用time.time()返回的秒
- 元组示例:
(2009, 8, 2, 20, 40, 3, 6, 214, 0)
time.strftime(format)
格式:time.strftime(’%Y-%m-%d %H:%M:%d’ ‘2009-08-02 20:50:02’
- math
- 四舍五入,向下取余:
import math; math.floor(39.9)
- 平方根:
import math; math.sqrt(9)
- x 的 y 次方:
import math; math.pow(x, y)
- random
- 随机数:
import random; random.randint(1, 100)
- md5
- md5.new(arg) arg 要md5 的内容,返回一个md5 对象
- digest(),摘要,返回16 个字节
- hexdigest(),16 进制摘要,返回32 个字节
- base64
- base64.b64encode
- base64.b64decode
- hashlib
- hashlib.md5()
- hashlib.sha1()
- eval 作用:将字符串
str
当成有效的表达式来求值并返回计算结果,可以把 list、tuple、dict 和 string 相互转化,示例:
str1 = "{'a': 1, 'b': 2}"
json1 = eval(str1)
print(type(json1))
print(json1)
- 从命令行读取
raw_input()
函数会把所有的输入当作原始数据(raw data),然后将其放入字符串中
key = input("输入字符:")
函数会假设用户输入是合法的python表达式
shutil
module很方便,是os模块的补充
- re
import re
re.match(r'^(\d+)(0*)$', '102300').groups()
re.compile(r'^(\d{3})-(\d{3,8})$')
先预编译,然后在match,提高效率
第三方模块
- 解析html页面:
from HTMLParser import HTMLParser
- 图像处理标准库:
PIL:Python Imaging Library
- email
- Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件
- Python内置一个poplib模块,实现了POP3协议,可以直接用来收邮件。要把POP3收取的文本变成可以阅读的邮件,还需要用email模块提供的各种类来解析原始文本,变成可阅读的邮件对象
json
模块提供的方法和cPickle模块类似,都有dump,dumps,load,loads方法
其他
a=0xffff
十六进制表示
- import types types.StringType
- 判断类型用
type()函数
,判断继承类的类型用 isinstance()函数
- type()可以动态创建类,而不需要使用class定义的方式,例如:
type('Hello', (object,), dict(hello=fn))
,通过type()函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class
- 元类metaclass:除了使用type()动态创建类以外,要控制类的创建行为,还可以使用metaclass
- 序列化在python中叫
pickling
,其他语言中称为:serialization
,marshalling
cPickle
模块是c语言写的,专门处理序列化
cPickle.dumps()
dump成str,cPickle.dump()
dump到文件中,cPickle.loads()
反序列化str成对象,cPickle.load()
从文件中反序列化出对象
- 通常class的实例都有一个
__dict__
属性,它就是一个dict,用来存储实例变量
- 大部分web应用都是IO密集型
- 单进程的异步编程模型称为协程,有了协程的支持,就可以基于事件驱动编写高效的多任务程序
- collections模块
- 用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便
- deque 是双向列表,解决了list插入和删除低效的问题
- defaultdict(带默认值的dict) 当key不存在时,不再抛出KeyError,而是返回一个默认值
- OrderedDict,有顺序的dict
- Counter实际上是dict的一个子类
- struct模块:解决str和其他二进制数据类型的转换
- itertools模块提供的全部是处理迭代功能的函数,它们的返回值不是list,而是迭代对象,只有用for循环迭代的时候才真正计算