2016-02-25 17 views
0

A具有一個函數,它接受一個列表並測試列表成員是否等於一個值。如果該值包含空格,則此檢查失敗。我對目標成員和測試值使用了ord(),並且這些字符確實都是一樣的。如果成員包含空格,則無法測試函數列表的外部

我目前的解決方法是從列表成員中去掉空格,但這並不理想。

這是怎麼發生的?這似乎是一個主要問題,如果函數調用的列表實際上無法檢查成員資格(如果成員有空格)。 。 。

MWE:

list_ = ['a a', 'bb', 'cc'] 

for item in list_: 
    print(item + ' == a a?\t', item is 'a a') 

def function_(): 
    for item in list_: 
     print(item + ' == a a?\t', item is 'a a') 
function_() 

def function_(list_): 
    for item in list_: 
     print(item + ' == a a?\t', item is 'a a') 
function_(list_) 

回答

1

is的操作者用來檢查兩個對象是否是相同的對象,但是兩個相同的字符串不必指向存儲器中的相同的位置。相反,請使用相等運算符==

def function_(): 
    for item in list_: 
     print(item + ' == a a?\t', item == 'a a') 

is檢查成功的第一個例子,因爲你的解釋執行的合併兩個'a a'字符串文字到內存中的單個對象的優化。在其他示例中,函數外部的'a a'和函數內部的'a a'處於不同範圍內,因此不會發生此類優化。

相關問題