为什么,对于x=0,';不是x';真实且';x';在Python中是否为False?

为什么,对于x=0,';不是x';真实且';x';在Python中是否为False?,python,integer,boolean-operations,Python,Integer,Boolean Operations,我对x的True/False和不是x感到困惑 对于Python中的x=0,其中x是int 为什么if not x允许执行以下语句,为什么if x不允许执行以下语句 请给出解释。如果语句的条件计算为“false”值,如0、空字符串、false或空列表/元组,则语句不执行其内容。如果语句的条件计算为“false”值,如0、空字符串、false,则语句不执行其内容,或者一个空的列表/元组。假设你的意思是 x = True y = 0 if x: print('x is true') if not

我对
x
True
/
False
不是x
感到困惑

对于Python中的
x=0
,其中
x
int

为什么
if not x
允许执行以下语句,为什么
if x
不允许执行以下语句


请给出解释。

如果语句的条件计算为“false”值,如0、空字符串、
false
或空列表/元组,则语句不执行其内容。

如果语句的条件计算为“false”值,如0、空字符串、
false
,则语句不执行其内容,或者一个空的列表/元组。

假设你的意思是

x = True
y = 0

if x:
  print('x is true')
if not y:
  print('your not sure why this prints')

这是因为在Python中,
0
的计算结果为False

x = True
y = 0

if x:
  print('x is true')
if not y:
  print('your not sure why this prints')
这是因为在Python中,
0
的计算结果为False。

来自Python文档:

“默认情况下,对象被视为true,除非其类定义了返回False的bool()方法或使用对象调用时返回零的len()方法。1以下是大多数被视为False的内置对象:

  • 定义为false的常量:
    None
    false

  • 任何数字类型的零:
    0
    0.0
    0j
    十进制(0)
    分数(0,1)

  • 空序列和集合:
    '
    ()
    []
    {}
    集()
    范围(0)

就是零是整数,

>>> type(0)
<class 'int'>
>类型(0)
但是有一个错误的逻辑值,如python文档中的“”、()、[…]等等:

默认情况下,对象被视为true,除非其类定义了返回False的bool()方法,或与对象一起调用时返回零的len()方法。1以下是大多数被认为是错误的内置对象:

  • 定义为false的常量:
    None
    false

  • 任何数字类型的零:
    0
    0.0
    0j
    十进制(0)
    分数(0,1)

  • 空序列和集合:
    '
    ()
    []
    {}
    集()
    范围(0)

就是零是整数,

>>> type(0)
<class 'int'>
>类型(0)

但是有一个错误的逻辑值,如“”,(),[。。。以此类推

0
是一个,
,而任何非零的数字计算为

x = 0
if not x
就像说

x = 0
if x is False:

条件满足的值。

0
是一个,
False
,而任何非零的数字计算为
True

x = 0
if not x
就像说

x = 0
if x is False:

因为在python中
0
被认为是错误的,所以当您编写
(如果x)
时,它将仅在
x=0
(因此它将被评估为true)。

因为在python中
0
被视为false,所以当您编写
(如果x)
时,它将仅在
x=0
(因此它将被评估为true)。

听起来您需要进行一些布尔检查。 python世界中的一切(以及大多数编程)归结起来要么是真的,要么是假的。 以整数为例。 在python(可能还有大多数语言)中,值0变为False,其他所有值都为True。 通过使用
bool
函数,可以获得python中几乎任何内容的真/假值。尝试
bool(0)
bool(2)

现在,
if
所做的是获取一个表达式(基本上只是一个布尔值),如果它为真,则执行代码块,如果为假,则跳过它

x=0
如果x:
print(“这将永远不会被打印,因为x是”,x,“它的布尔值是”,bool(x))
现在,
做的是取一个布尔值,并使其相反<代码>不正确为
错误
<代码>非假为
。它是这样做的,但是有很多次
not
存在,因此
not-True
将是
True

x=0
如果不是x:
打印(“这将打印,因为x是”,0,“x的布尔值是”,bool(x),“而布尔值x的非值是”,notbool(x))

听起来你需要一点布尔审查。 python世界中的一切(以及大多数编程)归结起来要么是真的,要么是假的。 以整数为例。 在python(可能还有大多数语言)中,值0变为False,其他所有值都为True。 通过使用
bool
函数,可以获得python中几乎任何内容的真/假值。尝试
bool(0)
bool(2)

现在,
if
所做的是获取一个表达式(基本上只是一个布尔值),如果它为真,则执行代码块,如果为假,则跳过它

x=0
如果x:
print(“这将永远不会被打印,因为x是”,x,“它的布尔值是”,bool(x))
现在,
做的是取一个布尔值,并使其相反<代码>不正确为
错误
<代码>非假为
。它是这样做的,但是有很多次
not
存在,因此
not-True
将是
True

x=0
如果不是x:
打印(“这将打印,因为x是”,0,“x的布尔值是”,bool(x),“而布尔值x的非值是”,notbool(x))

归根结底:因为语言定义是这样说的

Python选择将几乎所有表达式隐式转换为布尔值(真/假)。转换是在语言中定义的

对于整数类型,转换为0为False,其他