【问题标题】:Explanation on code after if statement colonif语句冒号后的代码说明
【发布时间】:2017-12-02 13:53:08
【问题描述】:

我在学习 pygame 的时候,偶然发现了一行我看不懂的代码:

if y == 0 or y == height-1: var1 *= -1

我了解python中的if语句和逻辑门的用法,我不明白的是if语句之后的一小段语句: "var1 *= 1"

有人能解释一下这个语法吗?我不理解代码,并认为如果我们输入冒号以外的任何内容,它会返回语法错误。

【问题讨论】:

  • 这只是将两个语句放在同一行,这是合法的。如果var1... 部分在下一行,你能理解吗?
  • x *= y 等价于x = x * y。某些类型在实现上存在一些细微差别,但现阶段您可能无需担心
  • 同效:var1 = -var1.

标签: python python-3.x if-statement syntax


【解决方案1】:

实际上,在 Python 中并没有规定不能在冒号后面写东西。实际上,您也可以在 if 条件之后编写多个语句,例如:if True: print("foo"); print("bar")

但出于文体原因,一般建议在冒号后换行。例外情况可能是块的内容非常简单且只有一行。

*=的意思是把左边的变量赋值给自己乘以右边的表达式的值。

【讨论】:

  • 哦,我明白了!,知道这很有帮助 - 可以稍微整理一下代码。谢谢
  • 分号有其局限性。只有 simple 语句可以用分号连接。我对它在 Python 3 中幸存下来感到有些惊讶,并且非常怀疑如果今天从头开始定义该语言,它是否会被添加。
【解决方案2】:

我们可以在冒号后面写东西。另一个常见的事情是使用分号来链接操作或导入。但是出于可读性的考虑,强烈建议不要使用这些语法。我会这样写:

if (y == 0 or y == height-1):
    var1 *= -1

或者如果你有更复杂的关系:

cond1 = (y == 0)         # explanation1
cond2 = (y == height-1)  # explanation2

if (cond1 or cond2):
    var1 *= -1

【讨论】:

  • 只是为了理解,可以举个连锁操作的例子吗?
  • @Blueboy90780 可能是错误的词。我在一排想到了这样的事情:print("1");print("2");print("3")(“操作链”)
【解决方案3】:

一般

if condition is true:    
        statement
else:
    another statement

所以,根据你的说法:

if y == 0 or y == height-1:
    var = var * (-1)

【讨论】:

    【解决方案4】:
    var *= -1 
    

    等价于

    var = var * (-1)
    

    也就是说var的符号会改变。


    if condition: statement
    

    等价于

    if condition:
        statement
    

    【讨论】:

    • 这不是我的意思,我是在问整行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多