不带名称的Python表达式(作为LHS)

不带名称的Python表达式(作为LHS),python,expression,Python,Expression,如果我在sample.py文件中写以下两条语句 radius = 10 2*radius 并解释(>>>python-i sample.py) 为什么python不在第二条语句(2*radius)处出错,这条语句在语法/语义上看起来是错误的,可能需要LHS(name)来绑定RHS值 我发现Java和C都不允许使用这种无用的语句,这与编译/解释版本无关。它不会停止,因为python没有问题。它只需计算2*半径,然后对结果不做任何处理,继续处理代码的其余部分。不用说,这是一个完全无用的语句,除非

如果我在sample.py文件中写以下两条语句

radius = 10

2*radius
并解释(>>>python-i sample.py)

为什么python不在第二条语句(
2*radius
)处出错,这条语句在语法/语义上看起来是错误的,可能需要LHS(name)来绑定RHS值


我发现Java和C都不允许使用这种无用的语句,这与编译/解释版本无关。

它不会停止,因为python没有问题。它只需计算
2*半径
,然后对结果不做任何处理,继续处理代码的其余部分。不用说,这是一个完全无用的语句,除非您实际将结果赋给某个变量,否则它不会停止,因为
python
没有问题。它只需计算
2*半径
,然后对结果不做任何处理,继续处理代码的其余部分。不用说,除非你实际上是把结果分配给某个变量

,否则它是完全无用的语句,因为Python不是java或C++,它允许这种表达式,并且确实计算它:

>>> radius = 10
>>> 2*radius
 20

因为Python不是java或C++,它允许使用这种表达式,并且确实计算它:

>>> radius = 10
>>> 2*radius
 20

Python允许表达式本身不作为语句的一部分(赋值或其他方式)

如果没有,则任何就地函数或方法调用也需要赋值:

listobject.sort()  # this is nothing more than an expression
必须写为:

ignored = listobject.sort()  # assign None to ignored
Python无法知道表达式对其余代码没有影响
radius
可以引用具有的对象,Python执行
2*radius
表达式时将调用该对象


因此,最终,Python会为您计算
2*10
,放弃结果,然后继续。

Python允许表达式独立运行,而不将其作为语句的一部分(赋值或其他)

如果没有,则任何就地函数或方法调用也需要赋值:

listobject.sort()  # this is nothing more than an expression
必须写为:

ignored = listobject.sort()  # assign None to ignored
Python无法知道表达式对其余代码没有影响
radius
可以引用具有的对象,Python执行
2*radius
表达式时将调用该对象


因此,最后,Python为您计算
2*10
,放弃结果,然后继续。

Python不介意放弃计算表达式的结果。事实上,a只是一个文本字符串,恰好是函数中的第一条语句。这样的字符串对程序的执行没有实际影响。

Python不介意放弃计算表达式的结果。事实上,a只是一个文本字符串,恰好是函数中的第一条语句。这样的字符串对程序的执行没有实际影响。

此外,如果您对此类代码使用
pylint
之类的工具,则会得到无意义的语句警告。此外,如果您对此类代码使用
pylint
之类的工具,您会得到无意义的语句警告。martijn您是说python inturn解释运算符+*/%,并调用左(2)/右(半径)操作数(对象)的方法,该操作数(对象)可以是?表达式类似于(2)吗?\uuuMul\uuuuu(2,10)?@Sham:Python中的一切都是对象;是的,Python
*
操作符将使用
\uuu mul\uuu()
\uuu rmul\uuu()
方法(如果存在)并且不对给定参数返回
NotImplemented
。对于
2*10
,这可能意味着Python尝试
(2)。\uuu mul\uuuu10
,如果返回
NotImplemented
,则接下来尝试
(10)。\uuu rmul\uuuuuu(2)
.Martijn----1)哦,好的,那么操作符(+*/%)在Python中实际上不是原始的,不像Java或C。它们被映射到对象方法,正如您在之前的更新中提到的那样,我说的对吗2) 另一个点2和radius(值10)在内部被认为是两个不同的整数类型的对象,那么操作符呢,它们只是帮助python将*操作符映射到;大多数操作符被实现为委托给相关的对象,是的。Martijn--好的,这很有趣,因为纯面向对象的计算风格。所以,如果我的python文件有一行2(比如),那么在内部会发生什么呢?martijn你是说python inturn解释运算符+*/%并调用左(2)/右(半径)操作数(对象)的方法,可以是?表达式类似于(2)吗?\uuuMul\uuuuu(2,10)?@Sham:Python中的一切都是对象;是的,Python
*
操作符将使用
\uuu mul\uuu()
\uuu rmul\uuu()
方法(如果存在)并且不对给定参数返回
NotImplemented
。对于
2*10
,这可能意味着Python尝试
(2)。\uuu mul\uuuu10
,如果返回
NotImplemented
,则接下来尝试
(10)。\uuu rmul\uuuuuu(2)
.Martijn----1)哦,好的,那么操作符(+*/%)在Python中实际上不是原始的,不像Java或C。它们被映射到对象方法,正如您在之前的更新中提到的那样,我说的对吗2) 另一个点2和radius(值10)在内部被认为是两个不同的整数类型的对象,那么操作符呢,它们只是帮助python将*操作符映射到;大多数操作符被实现为委托给相关的对象,是的。Martijn--好的,这很有趣,因为纯面向对象的计算风格。因此,如果我的python文件有一行代码2(