Python “中”的含义&引用;?成员资格测试空字符串文本
我偶然发现了一段明显可怕的代码:Python “中”的含义&引用;?成员资格测试空字符串文本,python,Python,我偶然发现了一段明显可怕的代码: def define_db_name(): 如果您的姓名在“”中: 返回“wallet.dat” 其他: 返回您的姓名 如果“:中的xx是什么意思?如果wallet\u name为空字符串,则该表达式的计算结果是否总是False? 如果代码编写如下,可能会更清楚: if wallet_name == '': 或者只是: if not wallet_name: 如果wallet\u name本身为空,则返回True: >>> foo = '
def define_db_name():
如果您的姓名在“”中:
返回“wallet.dat”
其他:
返回您的姓名
如果“:中的xx是什么意思?如果
wallet\u name
为空字符串,则该表达式的计算结果是否总是False
?
如果代码编写如下,可能会更清楚:
if wallet_name == '':
或者只是:
if not wallet_name:
如果
wallet\u name
本身为空,则返回True
:
>>> foo = ''
>>> foo in ''
True
但这是可怕的。如果不是钱包,只需使用\u name:
即可,或者使用或
并取消如果
语句:
def determine_db_name():
return wallet_name or "wallet.dat"
这是因为
或短路,如果不是空字符串,则返回wallet\u name
,否则返回“wallet.dat”
。通常在检查数组中是否存在键或列表中是否存在元素时使用中的
>>> 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
也许他们的意思是同样可怕的,如果钱包的名字是“
,并且输入了一些偶然的更正确的东西?lol@投票结果接近?@Wooble:那么这个错误是连续两次犯的。请参阅示例函数前面的确定\u db\u dir
函数。我确实看到是\u msg\u to \u符号不是-1
,秒不是“”
。。我现在会像躲避瘟疫一样避开这个软件包。@MartijnPieters——(开玩笑)至少他们有远见设置never\u update=False
,所以也许将来的更新会解决它。在我们任何人说出任何意思之前,请阅读以下内容:如果wallet\u name其他名称,请返回wallet\u name“wallet.dat”
使用或
/和
作为条件表达式。不是很像蟒蛇。@Ber:在这种情况下是这样的。在这里使用条件表达式是过分的。如果要使用testexpression和truevalue或false值
,那么条件表达式将是更好的选择(避免使用false-ytruevalue
的问题,但对于简单的潜在空值或回退值
而言,上述完美且最好的方法是,比更详细的条件表达式wallet\u name或“wallet.dat”
更具可读性。