不要使用索引来循环序列
不要:for i in range(len(tab)) :
print tab[i]
做:for elem in tab :
print elem
为将为你自动执行大多数迭代操作。
使用enumerate如果确实需要索引和元素。for i, elem in enumerate(tab):
print i, elem
使用“==”检查时要小心千真万确或假的if (var == True) :
# this will execute if var is True or 1, 1.0, 1L
if (var != True) :
# this will execute if var is neither True nor 1
if (var == False) :
# this will execute if var is False or 0 (or 0.0, 0L, 0j)
if (var == None) :
# only execute if var is None
if var :
# execute if var is a non-empty string/list/dictionary/tuple, non-0, etc
if not var :
# execute if var is "", {}, [], (), 0, None, etc.
if var is True :
# only execute if var is boolean True, not 1
if var is False :
# only execute if var is boolean False, not 0
if var is None :
# same as var == None
不要检查是否可以,只需做并处理错误
不要:if os.path.isfile(file_path) :
file = open(file_path)
else :
# do something
做:try :
file = open(file_path)
except OSError as e:
# do something
或者更好的是使用python 2.6/3:with open(file_path) as file :
Python是动态类型的,因此检查类型会使失去灵活性。相反,可以通过检查行为来使用鸭子类型。例如,希望函数中有一个字符串,然后使用str()来转换字符串中的任何对象。要想获得一个列表,请使用list()来转换列表中的任何可迭代性。
不要:def foo(name) :
if isinstance(name, str) :
print name.lower()
def bar(listing) :
if isinstance(listing, list) :
listing.extend((1, 2, 3))
return ", ".join(listing)
做:def foo(name) :
print str(name).lower()
def bar(listing) :
l = list(listing)
l.extend((1, 2, 3))
return ", ".join(l)
不要:class Father :
pass
class Child(Father) :
pass
做:class Father(object) :
pass
class Child(Father) :
pass