這是一個系列文章,主要分享python的使用建議和技巧,每次分享3點,希望你能有所收穫。
1 is 和 == 的區別
import os
str1 = os.__name__
str2 = "os"
print str1
# os
print str2
# os
print str1 == str2
# True
print str1 is str2
# False
由示例中可以看到,str1和str2的值都是字符串”os”,str1 == str2爲True,但是str1 is str2卻爲False,即is和==不是一回事,is爲True表示兩個對象的id相同,即id(str1) == id(str2)時,str1 is str2才爲True,is表示2個對象引用同一塊內存內容,==表示2個對象的值相等。所以判斷2個對象值是否相等時,使用==,判斷2個對象是否引用同一塊內存時,使用is。如果將上面示例中的str1 = os.name修改成str1 = “os”,你會發現str1 is str2爲True,這是python爲了性能考慮,將str1和str2都指向同一塊內存,內存的值就是字符串”os”,所以導致str1 is str2爲True,如下:
str1 = "os"
str2 = "os"
print str1
# os
print str2
# os
print str1 == str2
# True
print str1 is str2
# True
print id(str1) == id(str2)
# True
print id(str1)
# 31301840
print id(str2)
# 31301840
2 通過下劃線_丟棄多餘的返回值
- 不推薦方式
def demo():
return 0, 1, 2
multi_values = demo()
print multi_values[1]
# 1
- 推薦方式
def demo():
return 0, 1, 2
_, one, _ = demo()
print one
# 1
前一種方式將返回的多個值以元組的形式保存在變量multi_values中,然後讀取第二個值,後一種方式中,通過下劃線方式,丟棄多餘的函數返回值,更加簡潔易讀。
3 如何判斷文件是否被打開
- 推薦方式
with open("tmp") as f:
print f.closed
for line in f.readlines():
print line
print f.closed
'''
False
line 1
line 2
line 3
True
'''
由示例中可以看到,使用with方式打開文件,文件在with語句塊範圍外會自動關閉。第一個print打印False,文件處於打開狀態,第二個print在with語句的範圍外,打印True,表明文件處於關閉狀態。