关于 Python 2.7 中 and/or 操作的执行顺序,我有什么不明白的地方?

What don't I understand about the order of execution and/or operations in Python 2.7?

我有一个列表,我正在尝试获取该列表中唯一项的集合或列表。我还需要从列表中删除特定项目的所有实例,在本例中为 'USD'.

currencies = ['AUD', 'AUD', 'CAD', 'CHF', 'EUR', 'GBp', 'GBp', 'HKD', 'JPY', 'KRW', 'NOK', 'SEK', 'TWD', 'USD', 'USD', 'ZAr']

我最初尝试过,

foreign_currencies = set(currencies).discard('USD')

但注意到该函数正在返回一个 'NoneType'

为了让它工作,我必须分两步完成。

foreign_currencies = set(currencies)
foreign_currencies = foreign_currencies.discard('USD')

谁能告诉我为什么会这样 and/or 解释一下我对执行顺序不理解的地方?在第一个例子中, .discard() 是在构造集合之前被调用的吗?我没有得到更深层次的东西吗?

编辑:虽然“Why does list.append evaluate to false?”中的回答回答了我的问题,但我的问题并不是重复的。提出的问题不一样,答案是。

因为 discard 没有 return 任何 output.It 进行就地删除。

你需要做

foreign_currencies = set(currencies)
foreign_currencies.discard('USD') #do not assign this as `discard does not return anything.
print foreign_currencies #now you have the currect result

正如vks所说,discard是一个就地操作。这是您的代码 'wants' 要做的事情:

foreign_currencies = set(currencies)
foreign_currencies.discard('USD')