【问题标题】:Understanding this Python ‘if statement’ with unfamiliar expression type [duplicate]用不熟悉的表达式类型理解这个 Python 的“if 语句”[重复]
【发布时间】:2020-05-10 23:41:15
【问题描述】:

抱歉,如果这是一件简单的事情,我只是没有运气在网上获得答案(如果这不是一个发帖的好地方)。

我一直在尝试改进我的 Python,并且一直在尝试理解神经网络/自然语言处理包的一些代码。我遇到了这个:

if args.encoder_layers_to_keep:
        args.encoder_layers = len(args.encoder_layers_to_keep.split(","))

我还没有遇到过带有这样表达式的 if 语句。变量或任何东西之间没有比较。我唯一的猜测是它返回一个 true 或 false 值并且可以使用它,但我真的不确定。

作为参考,这里是完整的脚本 - https://github.com/pytorch/fairseq/blob/master/fairseq/models/transformer.py

我将不胜感激。

谢谢, 贾斯汀

【问题讨论】:

  • 如果args.encoder_layers_to_keep 的布尔值相当于true,它将评估为真,或者如果它具有0 以外的整数值,它将再次评估为真。否则,它将是错误的。或空字符串 -> false 而任何其他字符串 -> true,如下面的答案所述。
  • 这能回答你的问题吗? if statement without a condition
  • args 是作为参数传递给方法的对象。 encoder_layers_to_keep 是 args 的属性。从下面的行来看,它应该是一个字符串。空字符串None 和False 是python 中falsy values 的示例。嵌套语句仅在属性为真值(例如非空字符串)时才会执行。

标签: python if-statement expression


【解决方案1】:

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

args.encoder_layers_to_keep 似乎是一个字符串变量。空字符串 "" 的计算结果为 False,非空字符串的计算结果为 True。

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

这是在Python style guide (PEP8) 中建议的:

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

if not seq:
if seq:

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

【讨论】:

  • 谢谢!我一直在到处看到这些,但从未在任何在线教程或解释中看到。那么,它是否有任何其他特殊用途,例如 if variable = 0: 或者它本身只是“适当的表示法”?
  • 不,if variable == 0 没有特殊用途。我猜这有点捷径,因为您不必使用len(空序列的len 为0)。如果这是您问题的答案,请选择绿色箭头将其标记为答案。
猜你喜欢
  • 2020-08-15
  • 2017-01-28
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多