10

我偶然发现了这段明显可怕的代码:

def determine_db_name():
    if wallet_name in "":
        return "wallet.dat"
    else:
        return wallet_name

应该是什么if xx in "":意思?它不总是评估为False吗?

4

3 回答 3

13

True如果wallet_name它本身是空的,它将返回:

>>> foo = ''
>>> foo in ''
True

不过这很可怕。只需使用if not wallet_name:,或使用or并完全取消该if语句:

def determine_db_name():
    return wallet_name or "wallet.dat"

之所以有效,是因为or短路,wallet_name如果不是空字符串则返回,否则"wallet.dat"返回。

于 2013-04-04T13:44:53.203 回答
7

wallet_name如果是空字符串,则该表达式为真。

如果代码编写如下,可能会更清楚:

if wallet_name == '':

要不就:

if not wallet_name:
于 2013-04-04T13:44:18.507 回答
0

通常in用于检查数组中是否存在键或列表中是否存在元素。

>>> 2 in [1,2,3]
True
>>> 6 in [1,2,3]
False
>>> 'foo' in {'bar', 'foo', 'baz'}
True

但它也适用于字符串:

>>> 'foo' in 'barfoobar'
True
>>> 'foo' in 'barbarbar'
False
于 2013-04-04T13:58:27.097 回答