我偶然发现了这段明显可怕的代码:
def determine_db_name():
if wallet_name in "":
return "wallet.dat"
else:
return wallet_name
应该是什么if xx in "":
意思?它不总是评估为False
吗?
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"
返回。
wallet_name
如果是空字符串,则该表达式为真。
如果代码编写如下,可能会更清楚:
if wallet_name == '':
要不就:
if not wallet_name:
通常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