2024-04-19 09:14:39 发布
网友
我需要知道Python是如何执行算术运算的。下面我给出了一些问题。请解释一下这背后的概念。你知道吗
why 3+-+--2 = 1 why 3+-+-+--+++2 = 1 why 3-----------2 = 1 why 3--------+2 = 5
在调查这些事情时,从小事做起,从小事做起是有帮助的。如果你一个接一个地尝试这些表达式,很容易看出它是如何工作的:
3-2 = 1 3 2 = 5 3 -2 = 1 3 2 = 5
基本上,第一个操作应用于两个操作数,所有其他+或-作为一元操作(分别作为“正”和“负”转换)堆叠在右操作数上。也可以使用~操作(二进制负数)。Python中没有其他的一元运算符,所以只能使用这三种运算符(从技术上讲,abs()也是一元运算符,但它是作为函数调用而不是运算符实现的,所以不能像这样进行堆栈)。你知道吗
+
-
~
abs()
在内部,这些操作被解释为对x.__pos__()、x.__neg__()和x.__invert__()特殊方法的调用。有关详细信息,请参见Python docs关于特殊方法。你知道吗
x.__pos__()
x.__neg__()
x.__invert__()
要了解Python是如何处理这些表达式的,可以将第一个运算符右侧的所有内容都用括号括起来,然后使用标准算术规则计算:
3+-2 = 3+(-2) = 1 3+ 2 = 3+( 2) = 3+(-(-2)) = 3+2 = 5 3 +2 = 3-(-+2) = 3-(-(+2)) = 3-(-2) = 3+2 = 5
当然,如果您发现自己编写了3+ +~+-2这样的表达式,那么您的代码确实有一些问题,但我认为您的问题是理论性的。:-)
3+ +~+-2
在调查这些事情时,从小事做起,从小事做起是有帮助的。如果你一个接一个地尝试这些表达式,很容易看出它是如何工作的:
基本上,第一个操作应用于两个操作数,所有其他
+
或-
作为一元操作(分别作为“正”和“负”转换)堆叠在右操作数上。也可以使用~
操作(二进制负数)。Python中没有其他的一元运算符,所以只能使用这三种运算符(从技术上讲,abs()
也是一元运算符,但它是作为函数调用而不是运算符实现的,所以不能像这样进行堆栈)。你知道吗在内部,这些操作被解释为对
x.__pos__()
、x.__neg__()
和x.__invert__()
特殊方法的调用。有关详细信息,请参见Python docs关于特殊方法。你知道吗要了解Python是如何处理这些表达式的,可以将第一个运算符右侧的所有内容都用括号括起来,然后使用标准算术规则计算:
当然,如果您发现自己编写了
3+ +~+-2
这样的表达式,那么您的代码确实有一些问题,但我认为您的问题是理论性的。:-)相关问题 更多 >
编程相关推荐