java - python 和 Java 中 while 循环中的表达式与赋值?

标签 java python while-loop expression variable-assignment

why does python assignment not return value: 上有一篇不错的帖子。但我不明白,为什么它不是 expression在Python中: 以下内容在 Java 中是合法的:

           int w=5;

        while (w-- > 2){
            System.out.println(w);
        }

即使在这里,如果我的理解是正确的,assignment w-- (w=w-1)不返回任何内容,但设置 w 的值;在这里assignment接下来是 expression (比较)

同时w--, python 中不允许,甚至不允许赋值后面跟表达式 例如:

#this code does not mean anything, an assignment followed by expression pattern.

>>> while ((b=10)!=5):
  File "<stdin>", line 1
    while ((b=10)!=5):

许多帖子声称拼写错误 ===将导致 assignment而不是comparison 。但我在上面看不到这一点, assignment of b=10首先发生,因为它是带括号的,然后进行比较以检查它是否是 equal to 5 。有一个expressionwhile声明。

感谢您的帮助

最佳答案

从 BNF 语法的角度来看,赋值由绑定(bind)到表达式的标识符组成,该表达式可简化为类型(原始解释,但你明白了),而表达式不包含赋值。这就是语言的语法结构。 Look through the grammar您将看到表达式不能包含赋值。

w-- 是一个具有副作用的表达式,因此它的核心仍然是一个表达式(没有实际意义,因为它在 python 中不存在)。在表达式求值过程中大幅改变机器的状态可能被视为危险的。

关于java - python 和 Java 中 while 循环中的表达式与赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20847697/

相关文章:

java - Spring:java.lang.NoClassDefFoundError:无法初始化类

java - Java 光标周围的黄色圆圈

python - 将几行与 Pandas 的定界符连接成一行

python - 如何在Python中存储csv中的行值?

c# - 使用 C# 迭代 MySql 数据库,在文本框的 foreach 或 while 循环中显示行

python - python 中的生成器比 while 循环更快吗?

java - 在 OSGi 容器中使用 Solrj

java - Apache camel在什么场景下应该和Rabbitmq一起使用

python - 这是用 Python 编写长列表的最干净的方法吗?

linux - 合并不同文件夹中的同名文件