這次將介紹 in 這個關鍵字,
in 最常出現在下面的用法
for key in d:
print key
其中 d 的型態可以是 list, tuple, set, string, dictionary 等。
要檢查一個字串是否含有某子字串,通常會想到下面的做法
sentence = "fly me to the moon"
if sentence.find("fly") != -1:
print "successful"
其實更好的方法是用 in
if "fly" in sentence:
print "successful"
是不是更好閱讀,打字也更快呢?
要把一個 dictionary 的 key 印出來,一般的想法是
school = {'NCKU':'Tainan', 'NSYSU':'Kaohsiung',
'NTU':'Taipei'}
for k in school.keys():
print k
其實只要用
for k in school:
print k
即可,但是如果迴圈內會改變 dictionary 的值,就必須用 .keys(),例如
for k in school.keys():
del school[k]
原因是迴圈在跑時不允許 dictionary 改變大小,所以
for k in school:
del school[k]
會出現 RuntimeError。
而之前的例子不會,因為 school.keys()
會傳回一個包含 school 所有 key 的 list,
迴圈在跑時改變的是 dictionary 而不是這個 list。
如果要檢查 dictionary 是不是含有某個 key,要用
if "NSYSU" in school:
print "yes"
而不要用
if school.has_key("NSYSU"):
print "yes"
原因是打字較快,容易閱讀,還有
polymorphic,
許多內建的型態都支援 in,只有 dictionary 支援 has_key,
如果是自己寫 class,
想要支援 if x in y 的語法就改寫 __contains__,
想要支援 for x in y 的語法就改寫 __iter__。
No comments:
Post a Comment