Python 使用__以及";抽象基int类中的方法
我试图理解抽象基int类的Python 使用__以及";抽象基int类中的方法,python,abstract-base-class,Python,Abstract Base Class,我试图理解抽象基int类的\uuuu和方法。在这里,我用两种不同的方式来调用该方法。在几乎所有的情况下,这两种方法的行为都与我预期的一样,它们输出第二个值,因为这两个值都是“真实的”。但在两个数之和=-1的特殊情况下,第一个方法打印0。有人能说为什么吗 value=-4 打印(值._u和_u(3))35;打印0 打印(值和3)#打印3 问题不在于\uuuu和uu操作员。python中的按位运算符不是,而是&: >>(7)。u和_uu(5)=(7和5) 真的 至于和如何与非布尔值交互,您可以阅读
\uuuu和
方法。在这里,我用两种不同的方式来调用该方法。在几乎所有的情况下,这两种方法的行为都与我预期的一样,它们输出第二个值,因为这两个值都是“真实的”。但在两个数之和=-1的特殊情况下,第一个方法打印0。有人能说为什么吗
value=-4
打印(值._u和_u(3))35;打印0
打印(值和3)#打印3
问题不在于\uuuu和uu
操作员。python中的按位运算符不是,而是&
:
>>(7)。u和_uu(5)=(7和5)
真的
至于和
如何与非布尔值交互,您可以阅读。针对您的具体情况:
和
返回第一个Falsy值(如果有),否则返回表达式中的最后一个值
在您的情况下,-4
和3
都是非错误值,因此返回最后一个值(3
)。考虑到这一点,我们也可以理解为什么-4和0以及3==0
,也就是说,因为0
是错误的
请注意,和
运算符的这种行为是有意义的。它只是以最自然的方式(或者至少是最自然的方式之一)扩展了自然布尔and运算符的逻辑。例如,True和False以及False和x
将在遇到第一个False
时立即返回False
,而True和True以及x
将只返回x
,因为前面的所有布尔值都验证全局语句
最后,位运算符处理负数时明显奇怪的行为来自。基本上,要将一个正数(例如,4=000100)变为负数,只需将它的所有位反转(111011),然后加1(111100=-4)。在评估3&-4
中,等于解决以下问题:
000011
& 111100
--------
= 000000
出于同样的原因,x&-4
对于4,5,6,7
中的任何x
(两个低位总是被-4(111100)二进制表示中的终止零所抵消)。问题不使用\uu和
运算符。python中的按位运算符不是和
它是&
:
>>(7)。u和_uu(5)=(7和5)
真的
关于和
如何与非布尔值交互,您可以阅读。对于您的特定情况:
和
返回第一个Falsy值(如果有),否则返回表达式中的最后一个值
在您的情况下,-4
和3
都是非伪值,因此返回最后一个值(3
)。考虑到这一点,我们也可以理解为什么-4和0以及3==0
,即因为0
是伪值
请注意,和
运算符的这种行为是有意义的。它只是以最自然的方式(或至少一种最自然的方式)扩展了自然布尔and运算符的逻辑。例如,True和False以及False和x
将在遇到第一个False
时立即返回False
,而True和True以及x
将只返回x
,因为前面的所有布尔值都验证全局语句
最后,位运算符在处理负数时的明显奇怪行为来自。基本上,要将正数(例如,4=000100)转换为负数,只需将其所有位(111011)反转,然后添加1(111100=-4)。在计算3&-4
中,等于解决以下问题:
000011
& 111100
--------
= 000000
出于同样的原因,x&-4
对4,5,6,7
中的任何x
都将计算为4
(在-4(111100)的二进制表示中,两个低位数字总是被终止的零抵消)。一位同学指出和()方法使用“按位和”。不是正常的和。另外,我在计算中使用了有符号整数,而不是2的补码。一位同学指出,AND()方法使用“按位AND”.不是正常的和。另外,我在计算中使用了有符号整数,而不是2的补码。你为什么说它不是按位AND?你从哪里得到“数字类”的概念?没有数字类。@user2357112:它是一个。你为什么说它不是按位AND?你从哪里得到“数字类”的概念?没有数字类。@user2357112:这是一个。所以,你不确定它为什么返回0?如果这对你来说很重要,我可以添加这个细节:)现在我读了我的答案,我想知道你是否在谈论打印(-4)中的0
。我可能也应该详细说明这个案例,但这可能不是你的问题?因此,你不确定它为什么返回0?如果这对你来说很重要,我可以添加这个细节:)现在我读了我的答案,我想知道你是否在打印(-4.\u和\uuuu(3))
中谈论0
。我可能也应该详细说明那个案子,但也许那不是你的问题?