编写高质量代码-改善Python程序的91个建议重看
编写高质量代码-改善Python程序的91个建议重看
wiki 的quicksort 可以轻松转为python
def quicksort(array):
less = []
greater = []
if len(array) <= 1:
return array
pivot = array.pop()
for x in array:
if x <= pivot:
less.append(x)
else:
greater.append(x)
return quicksort(less) + [pivot] + quicksort(greater)
import 一个包与sys.modules 关系,命名空间冲突
当import 一个包时,sys.modules就有相应的记录
c1.py
from c2 import g
def x():
pass
c2.py
from c1 import x
def g():
pass
python c1.py
Traceback (most recent call last):
File "c1.py", line 1, in <module>
from c2 import g # 新建模块对象c1
File "/home/lin/work/test/bar/c2.py", line 1, in <module>
from c1 import x # 新建模块对象c2
File "/home/lin/work/test/bar/c1.py", line 1, in <module>
from c2 import g # 从模块对象c2中导不出g
ImportError: cannot import name 'g' from 'c2' (/home/lin/work/test/bar/c2.py)
解决嵌套导入问题的一个方法是直接使用import语句
++i 没有语法错误
else 没这个简单
- while,for的else 在循环正常结束与循环条件不成立时执行
- break 跳出循环成立
finally 的坑
当try块中发生异常的时候, 如果在except语句中找不到对应的异常处理, 异常将会被临时保存起来, 当finally执行完毕的时候, 临时保存的异常将会再将被抛出, 但如果finally语句中产生了将的异常或者执行了return或者break语句, 那么临时保存的异常将会被失, 从而导致异常被屏闭
finally 使用return|break,会出现错误 finally vs return
staticmethod和classmethod
使用class存一些变量时就用到classmethod