从书上看到了,然后就跑了一下,再记录一下,或许能记住。
使用enumerate而不是range
遍历List或其他可迭代对象时,如果需要索引,我们可能会使用range
nums = [1, 2, 3, 4, 5]
for i in range(len(nums)):
print(i, nums[i])
上面的写法比较直接,但是不够简洁,推荐使用enumerate方法
nums = [1, 2, 3, 4, 5]
for i, j in enumerate(nums):
print(i, j)
enumerate(nums)会每次返回一个元组,包含当前索引与数据。如果只需要遍历数据,而不需要索引,可以直接用for...in
nums = [1, 2, 3, 4, 5]
for i in nums:
print(i)
使用with语句代替open()与close()
在操作文件的时候,我们使用open函数打开文件并得到一个文件对象,使用完成后再通过调用文件对象的close方法关闭文件,以方便其他程序的使用。
file = open('spam.txt', 'w')
file.write('Hello, World')
file.close()
如果在操作文件的过程中出现异常,close方法没有被调用到,那么该文件可能被损毁。
try:
file = open('spam.txt', 'w')
eggs = 42 / 0 # 抛异常
file.write(str(eggs))
file.close()
except Exception as e:
print(e)
使用with语句可以不用显示调用close方法,如下
with open('spam.txt', 'w') as file:
file.write('Hello, World')
使用is跟None做比较而不是用==
==是比较值,is是比较引用地址,两个对象可以有相同的值,但它们可能是两个不同的对象。
nums1 = [1, 2]
nums2 = [1, 2]
nums3 = nums1
print(nums1 == nums2) # True
print(nums1 is nums2) # False
print(nums1 is nums3) # True
所以比较某个对象是否是None时,必须使用is,如果你使用了==,PEP8也会提示你
PEP 8: E711 comparison to None should be 'if cond is None:'
a = None
print(a == None) # PEP8会提示
print(a is None)