python:在""?

o0'*_*0'. 9 python

我偶然发现了这段显而易见的代码:

def determine_db_name():
    if wallet_name in "":
        return "wallet.dat"
    else:
        return wallet_name
Run Code Online (Sandbox Code Playgroud)

这是什么if xx in "":意思?它不总是评估到False

Mar*_*ers 13

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

>>> foo = ''
>>> foo in ''
True
Run Code Online (Sandbox Code Playgroud)

虽然这很可怕.只需使用if not wallet_name:,或者完全使用or并废除该if声明:

def determine_db_name():
    return wallet_name or "wallet.dat"
Run Code Online (Sandbox Code Playgroud)

这是因为or短路,wallet_name如果它不是空字符串"wallet.dat"则返回,否则返回.

  • @Ber:在这种情况下.在这里使用条件表达式是过度的.如果你使用`testexpression和truevalue或falsevalue`那么条件表达式将是更好的选择(避免使用false-y`truevalue`的问题,但是对于一个简单的`potentialempty或fallbackvalue`*以上完全正常*和最好总而言之,*比更详细的条件表达式更具可读性* (4认同)

Mar*_*ers 7

如果wallet_name是空字符串,则表达式为true .

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

if wallet_name == '':
Run Code Online (Sandbox Code Playgroud)

要不就:

if not wallet_name:
Run Code Online (Sandbox Code Playgroud)