理解Python‘;if语句’;不熟悉的表达类型

理解Python‘;if语句’;不熟悉的表达类型,python,if-statement,expression,Python,If Statement,Expression,道歉如果这是一件直截了当的事情,我只是没有运气在网上得到答案(如果这不是一个发布的好地方) 我一直在努力改进我的Python,并且我一直在努力理解一些用于神经网络/自然语言处理包的代码。我遇到了这样一个问题: if args.encoder_layers_to_keep: args.encoder_layers = len(args.encoder_layers_to_keep.split(",")) 我没有遇到过这样的if语句。变量之间没有可比性。我唯一的猜测是,它返回一个真

道歉如果这是一件直截了当的事情,我只是没有运气在网上得到答案(如果这不是一个发布的好地方)

我一直在努力改进我的Python,并且我一直在努力理解一些用于神经网络/自然语言处理包的代码。我遇到了这样一个问题:

if args.encoder_layers_to_keep:
        args.encoder_layers = len(args.encoder_layers_to_keep.split(","))
我没有遇到过这样的if语句。变量之间没有可比性。我唯一的猜测是,它返回一个真值或假值,并与它一起工作,但我真的不确定

以下是完整的脚本供参考-

我很感激你能帮我做这件事

谢谢, Justin

空序列(例如列表、元组、字符串)的计算结果为
False
。非空序列的计算结果为
True

args.encoder\u layers\u to\u keep
似乎是一个字符串变量。空字符串
的计算结果为
False
,非空字符串的计算结果为
True

您可以通过使用内置函数
bool
将其转换为布尔值来证明这一点。试试
bool(“”)和
bool(“foobar”)

这在(PEP8)中提出:

对于序列(字符串、列表、元组),请使用空序列为false的事实:

if not seq:
if seq:

# Wrong:
if len(seq):
if not len(seq):

如果
args.encoder\u layers\u to_keep
的布尔值等价于
true
,它将计算为true,或者如果它的整数值不是
0
,它将再次计算为true。否则,它将是错误的。或者空字符串->假,而任何其他字符串->真,如下面的答案所述。这是否回答了您的问题
args
是作为参数传递给方法的对象
encoder\u layers\u to\u keep
是args的属性。从下面的行判断,它应该是一个字符串。空字符串、
None
False
是python中的示例。只有当属性是真实值(如非空字符串)时,才会执行嵌套语句。谢谢!我到处都能看到这些,但从来没有在任何在线教程或解释中看到过。那么,它是否还有其他特殊用途,比如变量=0时的
,或者它本身就是“正确的符号”?不,变量=0时的
没有特殊用途。我想这是一种捷径,因为您不必使用
len
(空序列的
len
为0)。如果这是您问题的答案,请选择绿色箭头将其标记为答案。