代码如下:
dic2 = {
's': '在'
}
if dic2['s'] is '在':
print(1)
print(id(dic2))
print(id('在'))
结果如下图,很奇怪,可以发现他们的id是相同的,所以is成立。
当我们用is来比较英文或者数字时,和==的效果是一样的。此时的字典是用eval函数从str转换而来的。
train_info_dic = eval(r.text, globals)
for dic in train_info_dic['data']:
# print(dic['train_no'])
if dic['station_train_code'] is 'Z386':
self.train_code = dic['train_no']
print(id(dic['train_no']))
print(id('Z386'))
结果如下,虽然他们的id不一样,用is得到的结果却是true,说明编译器仍然认为他们的值相等。
但是,当我这个字典的值是中文字符的时候,如果用is来比较就会得到false,如果用 = = 来比较就可以得到true。因此,当字典中值含有汉字的时候,最好使用 = = 来比较。
doc = urlopen(self.train_info_url).read()
# doc = str(doc, 'utf-8')
doc_dic = eval(doc, globals)
# print(doc)
# print(doc_dic)
for dic in doc_dic['data']['data']:
if dic['station_name'] == '湛江西':
print(dic['arrive_time'])
print(id(dic['arrive_time']))
print(id('湛江西'))
结果如下,id仍然不同,用is得到的结果是false,但是用==得到的结果为true。
更深层次的原因我就不知道了,被这个奇怪的东西困惑了一晚,希望能有大神讲解一下为什么。