这里有一篇很详细的, http://www.worldhello.net/doc/python/python.mm.htm
以下是我的笔记
以下是我的笔记
- 尽量使用 import, 而不使用 from xx import xx
- 每个包必须包含一个名为 __init__.py 的文件,以区分正常的文件夹
- python 中添加中文注释:
在 py 文件最顶行添加: # -*- coding: utf-8 -*
- 列表与元组
- 列表(list)是可变的, 由 [] 表示
- 元组(tuple)是不可变的, 由()表示, 创建一个元组必须加一个括号, 即使只有一个元素
如 42 是一个整数, (42)也是一个整数; 而 42, 则是一个元组, 相当于 (42,)
总算明白为什么有些代码里的元组定义最后一定要加一个括号了 - 元组和列表的主要区别是:
元组可以在映射(和集合的成员)中当键使用,因为其不可变性, 而列表则不行
- 对 string 的 formt 时, % 右边的如果是元组或字典,就会被格式化为多个值,而其他的序列,包括列表,都会被格式化为一个值, 对于列表,会自动调用 str 将其转化为字符串, 再替换掉 %s
- 字典(dict), 由 {} 表示. 键与值之间用 : 分隔, 项之间用 , 分隔
- 字典的格式化字符串,可以用 %(key)s % dict 来表示,相当方便啊
>>> phone
{'zf': '123', 'zyz': '456'}
>>> "zf's phone number is %(zf)s." % phone
"zf's phone number is 123." - 对 dict 的清空操作,clear() 与赋值 {} 是不一样的, clear 会清空所有引用的 dict, 而赋值 {} 不会影响引用的 dict
- 使用下标访问 dict, 若找不到 key, 会出错. 使用 get 方法, 则不会出错, 而会返 None 值, 或者get参数所带的值
- 字典的格式化字符串,可以用 %(key)s % dict 来表示,相当方便啊
- 序列解包(sequence unpacking)
将多个值的序列解开, 依次放在变量的序列中, 当一个函数返回一个无组时,可由此方便的进行赋值
>>> values = 1, 2, 3
>>> values
(1, 2, 3)
>>> x, y, z = values
>>> x
1
- 并行迭代: zip.
zip 可将两个序缩到一起, 返回以 列表 为元素的元组
- 编号迭代: enumerate
使用 for xx in yy 时, 如果在循环体内想知道当前 xx 在 yy 中的下标,如果又使用 yy.index[xx] 则比较不爽, 正确的写法是
for index, xx in enumerate(yy)
- 列表推导(list comprehension)
结果将会返回新列表, 可以增加更多 for 语句的部分
>>> [x*x for x in range(10) if x % 3 ==0]
[0, 9, 36, 81]
- python 中的参数都是不可改变的, 如果改变了, 则会创新新的复制.
如果传递的是列表或元组, 则也只能改变列表或元组内部的值,而不能改变列表或元组
- python 中可以在函数调用时提供参数名字,这样就可以无需考虑参数顺序了
如 def hello(x, y) 调用时可以按 hello(y='1', x='2') 来调用
- 收集参数
- 如果在写义时在参数前面加*,则可按 hello(1,2) 或 hello(1) 传递任意可变参数,传递过来的参数会被当成元组处理
- 如果定义参数时前面回**, 则可按 hello(y='1', x='2') 或 hello(x='2') 来传递任意数目参数,传递过来的参数,会被当成字典处理
- 异常处理 P133
try except else finally
- 应使用新的类定义形式 NewStyle 而不使用旧的类定义形式 OldStyle
class NewStyle(object):
pass
class OldStyle:
pass
- python 的类的默认构造函数及析构函数
- 构造函数 def __init__()
为了保证子类能用父类的类成员,应该在子类的构造函数中以父类的 类名.__init__() 调用父类的构造函数.
如果是在 python 中, 则可用 super 函数, 可以避免当有多个父类时, 需要写出每个父类的 __init__() 调用 - 析构函数 def __del__() 由于具体调用时间不可知,建议避免用户定义析构函数
- 构造函数 def __init__()
- 使用 @ 操作符来定义静态方法和静态成员函数
- 迭代器: 带有 next 方法的简单对象
iter(obj) 从一个可迭代对象得到迭代器
- 生成器: 包含了关键字 yield 的函数
- 当被调用时, 生成器函数返回一个生成器(一种特殊的迭代器), 可使用 send, throw 和 close 方法让活动生成器与外界交互
- 当生成器被调用时, 在函数体中的代码不会被执行,而会返回一个迭代器. 每次调用 .next() 请求一个值, 就会执行生成器中的代码, 直到遇到一个 yield 或者 return 语句. yield 语句意味着应该生成一个值, return 语句意味着生成器要停止执行(不再生成任何东西)
- 集合: set
- 集合是可变的, 所以不能用做字典的键.
- 集合本身只能包含不可变(可散列)值, 所以集合不能包含其他集合.但可以使用 fronzenset 将一个集合转成不可变的, 从面可以做为其他集合的子集
- 数据库操作游标
- rowcount 返回结果行数
- fetchone() 获取下一行
- fetchmany([size]) 获取多行
- fetchall() 获取剩余年有行
- 保留 N 位小数, 使用函数 round
round(1.35, 1) # 1.4
round(1.34, 1) # 1.3