使用各种条件语句设置变量

Setting a variable with various conditional statements

我有这个 python 编码语句:

is_headless = ["--headless"] if sys.argv[0].find('console.py') != -1 else [""]
  1. ["--headless"]if之间的空白是通过什么方式控制代码行的?
  2. "--headless" 如何以及将成为 is_headless 变量中的一个元素?
  3. 使用变量名 is_headless 表明最终值将 是 TrueFalse。这是正确的想法吗?在什么情况下会分配 TrueFalse
  4. [""]是表示False的一种方式吗?
  5. 有点迷糊...

好吧,从技术上讲,这是 Python 中的一行 if/else 语句,它非常强大且易于使用。我认为理解这一点的最简单方法是分解问题,使其更简单、更容易理解。

例如,替换示例值 'a' 和 'b' 并使用字符串而不是命令行中传递的参数,应该有助于使说明更清楚:

args = 'python console.py testing'
x = 'a' if args.find('console.py') != -1 else 'b'
print(x)

args = 'python testing'
x = 'a' if args.find('console.py') != -1 else 'b'
print(x)

输出:

a
b

另外,为了完整起见,回过头来回答你的其他问题:

  1. 当用户输入包含单词时console.py
  2. 是的,变量命名不太好。 is_headless 的名称通常表明该 var 是一个布尔类型,但在这里并非如此,因为该 var 实际上被分配了一个字符串列表,例如可以将其注释为 list[str]
  3. 嗯,从技术上讲 [""] 不是虚假的,但是空列表 [] 可以被认为是虚假的。我不太清楚为什么要在此处设置此设置,但是添加的上下文可能对此处有所帮助。
  1. In what way does the blank between ["--headless"] and if control the code line?

您可以将语句解析为:

is_headless = <expression>

其中 <expression> 的形式为 <true_value> if <condition> else <false_value>。根据 <condition> 的结果,表达式的计算结果为 <true_value><false_value>,并将这两个值之一分配给 is_headless.

  1. How would --headless ever be an element in the is_headless variable?

总体效果是将两个值之一分配给 is_headless["--headless"][""]。奇怪的是,这两个都是单值列表。让我们谈谈这个...

  1. Using the variable name is_headless suggests the final value would be True or False. Is this correct thinking? In what case would True or False be assigned?

根据变量名,这正是我所期望的。这意味着这是一个坏名字。它没有被分配布尔值,所以它不应该被命名为 is_xxx.

  1. Is [""] a way to indicate False?

它应该表示“没有参数”。同样,不要将额外的参数传递给以下命令。有一个空字符串可能是一个错误;我更愿意看到一个空列表 [] 而不是一个包含空字符串 [""].

的列表

如果变量名简单地命名为 headlessheadless_argument.

会更好

或者,我会写什么:

extra_arguments = []
if sys.argv[0].find('console.py') != -1:
    extra_arguments.append('--headless')

这就是我的命名方式:extra_arguments。它是可能会或可能不会传递的额外参数列表。默认情况下它是一个空列表,如果条件为真,那么我们向列表添加一个额外的参数 --headless

  1. A little confused...

我不怪你!