检查Python中的初始化变量

dav*_*ooh 6 python python-3.x

我是Python的新手,我正在玩一些代码片段.

在我的代码中,我需要检查变量初始化,我正在使用这个成语:

if my_variable:
    # execute some code
Run Code Online (Sandbox Code Playgroud)

但阅读一些帖子我发现这个其他成语用于:

if my_variable is not None:
    # execute some code
Run Code Online (Sandbox Code Playgroud)

它们是等价的还是存在一些语义差异?

the*_*eye 6

引用关于布尔运算的Python文档,

在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false : False, None所有类型的数字零,以及空字符串和容器(包括字符串,元组,列表,字典,集合)和frozensets).所有其他值都被解释为true.

所以,if my_variable将会失败,如果my_variable有任何上述falsy值,其中作为第二个将失败仅当my_variableNone.通常,变量用None占位符值初始化,如果它不在程序None中的某个时间点,那么它们将知道已经为其分配了一些其他值.

例如,

def print_name(name=None):
    if name is not None:
        print(name)
    else:
        print("Default name")
Run Code Online (Sandbox Code Playgroud)

这里,函数print_name需要一个参数.如果用户提供它,那么它可能不是None,所以我们打印用户传递的实际名称,如果我们没有传递任何东西,默认情况下None将被分配.现在,我们检查,如果nameNone确保我们正在打印的实际名称代替Default name.

注意:如果您真的想知道您的变量是否已定义,则可能需要尝试此操作

try:
    undefined_variable
except NameError as e:
    # Do whatever you want if the variable is not defined yet in the program.
    print(e)
Run Code Online (Sandbox Code Playgroud)