我很难理解这个
我试过:
1 2
| if not None:
print('True') |
为什么打印为真?None型不是应该是None型吗?
- 请阅读:stackoverflow.com/questions/3289601/null-object-in-python
- @那个线没有回答我的问题。
- 我想你是因为几个原因而被投票否决的。1)您似乎没有对您的问题进行简单的谷歌搜索,以找到python文档,该文档非常清楚地表明,None被评估为False。2)校对。"为什么是真的?"是相当草率的语法。
- @Aaron我建议您从阅读一本Python书籍开始了解基本的编程概念。你所要求的是简单的,类似于数学中的算术。您还可以转到python.org/doc了解关于python的更多信息。
- @我从Diveintopython3和Lpthw学习。
- @检查一下我是一个新用户,当然我会犯错误,你能做的最起码是让我松懈一下,告诉我在投反对票之前我做了什么。在语法方面,我把"print"从"why do it print true"中去掉,当我在一些文本中移动时。
- 为什么在python中"if not someobj:"比"if someobj==none:"更好?
- @亚伦,对,你的文章要校对一下。用"我是"中的一句话。付出一些努力
- 好。它打印True,因为您从字面上告诉程序打印"真"。
- 由于习惯了SQL的空值,我发现这个问题相当相关。
所有python对象都有一个真值,请参见真值测试。其中包括None,在布尔上下文中被认为是错误的。
此外,not运算符必须始终生成一个布尔结果,要么是True要么是False。如果not None生产了False,那么当bool(None)已经生产了False时,这会令人惊讶。
None值是一个sentinel对象,一个信号值。您仍然需要能够测试该对象,并且它有一个布尔值是非常有用的。例如:
1
| if function_that_returns_value_or_None(): |
如果None没有布尔值,该测试将中断。
python文档
4.1. Truth Value Testing
Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below. The following values are considered false:
None
False
zero of any numeric type, for example, 0, 0.0, 0j.
any empty sequence, for example, '', (), [].
any empty mapping, for example, {}.
instances of user-defined classes, if the class defines a bool() or len() method, when that method returns the integer zero or bool value False.
每个值都有一个称为"truthness"的属性。None的"真实性"是False。这样做有几个原因,例如,当您认为EDOCX1的返回值(0)为failure或False时,使用clean code。
"空"的对象,如''、[]、0或{}都被认为是错误的。注意,这不包括像EDOCX1(字符串)或'0'这样的对象。
因此,if not None将None转换为False。
"真实"也被称为"粗俗",在某些情况下更为正式。
[反讽模式]
如果您不喜欢打印True,可以让它打印False:
1 2
| if not None:
print('False') |
现在打印错误:)
编辑:如果您担心为什么不打印None,而不打印True或False或Apples,您可以让它打印None:
1 2
| if not None:
print('None') |
在python中,None是单例的。它在其他语言中被称为null。
在您的if not None:中,编译器假定not none表示非空或非零,并且我们知道if语句将非零值评估为True并执行它们。
功能示例:
1)if not None:在test()中打印参数x
1 2 3 4 5 6
| def test(x):
if not None:
print(x)
>>> test(2)
2 |
2)if 1:在test()中打印参数x
1 2 3 4 5 6
| def test(x):
if 1:
print(x)
>>> test(2)
2 |
3)if -1:在test()中打印参数x。
1 2 3 4 5 6
| def test(x):
if -1:
print(x)
>>> test(2)
2 |
4)if 0:没有在test()中打印参数x。
1 2 3 4 5
| def test(x):
if 0:
print(x)
>>> test(2) |
5)if True:在test()中打印参数x
1 2 3 4 5 6
| def test(x):
if True:
print(x)
>>> test(2)
2 |
- 在其他语言中,None与null不同。null是没有任何价值的,None本身就是价值。python引用总是存在的,并且需要指向一些东西。None对象是一个有用的默认值。python编译器对None没有任何假设,它是实现nb_bool槽的对象本身(相当于__bool__方法的C-API,返回0(false)。一堆虚假的物体比你给出的例子要大得多。