csdn 居然支持 markdown了, 强烈点个赞!
Python Another Digest
python用作工作语言也快一年了,当年接触的时候也就跟着老师快速过了一周的PPT, 从来没有系统地买过一本Python书细细阅读过
正好室友有本python基础教程,趁着这个机会炒一次回锅肉!
再读python
一些曾经不曾注意的细节
Dict
- python collection中的超实用类:Counter, deque, OrderedDict(按插入顺序)
- Dict的key可为int(以前都不知道), 同lua table; 但key一定是 immutable (不可变)
- “%(Ceil)” % phonebook 会自行抽取phonebook[“Ceil”]当做值替换,template正是如此,{{ count }}
dict, list 中每项都是指针, 必须deepcopy 才能隔离原值
dict.iteritems() 返回迭代器
.items()返回列表, 前者迭代更高效(不用生成列表)
dict.popitem() 随机弹出一个
杂项
- 比较运算: x == y 比值 x is y 比指针;
- 上文用C类比为: *x == *y; x == y 比较指针本身
- zip 打包(联合) 多个list, 长度已短为准;
zip([1,2], ['a', 'b', 'c'])
-->[(1, 'a'), (2, 'b')]
- for index, string in enumerate(strings): index 代表第几个(从零开始), 再也不用 index = 0 在循环里 index += 1了!
- reversed() 返回迭代器, sorted() 返回列表
for ...:
...
break
else: # 在for未触发break时 执行
...
- del x 只删引用,x指向的内存只能 garbage collection
- exec 可把string 当python 代码执行,为了安全用scope作为sandbox
scope = {}
exec string in scope
- callable(x) 判断 x 是否可调用; ( 3.0 更改为 hasattr(func, all)
- help(x) 会把 x 的 docstring, func(params) 全打印出来
- def print_params( * params, **param_dict) 前者元组, 后者字典
- vars() 返回当前作用域;locals 局部作用域;globals全局作用域
- 函数嵌套多用于闭包(closure) = func + 作用域
- 多态, duck typing, class中定义德method绑定了self
- __method 私有方法被翻译为 _classname__method
- issubclass(superclass, subclass) 判断是否继承关系
- bases 得到基类(们,当多重继承时)
try:
except ( , ) as e: # 获得异常变量
raise # 把异常交给上层函数
else: # 没有触发异常时执行
finally: # 总会执行