编写高质量代码-改善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

Loading Disqus comments...
Table of Contents