什么是无值?

我一直在研究Python,并且阅读了描述其None价值的一章,但不幸的是,这本书在某些方面并不十分清楚。我以为,如果我在那分享我的问题,我会找到答案。

我想知道None价值什么,您将其用于什么?

而且,我没有得到本书的这一部分:

将值None赋给变量是将其重置为其原始的空状态的一种方法。

这意味着什么?

答案很棒,尽管由于我对计算机世界的了解不足(我还没有了解类,对象等),所以我对大多数答案都不了解。这句话是什么意思?

将值None赋给变量是将其重置为其原始的空状态的一种方法。

最后:

最后,我从寻找不同的答案中得到了答案。我必须感谢所有抽出宝贵时间来帮助我的人(尤其是Martijn Pieters和DSM),我希望我可以选择所有答案作为最佳答案,但是选择仅限于一个。所有的答案都很好。


慕码人8056858
浏览 556回答 3
3回答

慕斯709654

由于Python程序员通常不会说将值None赋给变量是将其重置为其原始的空状态的一种方法。很难以一种有意义的方式解释布里格斯的意思,并解释为什么这里没有人对此感到满意。一个类推可能会有所帮助:在Python中,变量名称就像贴在对象上的标签一样。每个标签上都有一个唯一的名称,并且一次只能在一个对象上,但是如果需要,您可以在同一对象上放置多个标签。当你写F = "fork"您将标签“ F”放在字符串对象上"fork"。如果你再写F = None您将贴纸移动到None对象。Briggs想让您想象的是,您没有写贴纸"F",而是已经在F贴纸上了None,您所做的就是将其从None移到"fork"。因此F = None,如果我们决定将其None视为,则在键入时,您会将其“重置为原始的空状态” empty state。我可以看到他的意思,但这是一种不好的观察方式。如果启动Python并输入print(F),则会看到>>> print(F)Traceback (most recent call last):  File "<stdin>", line 1, in <module>NameError: name 'F' is not defined这NameError意味着Python无法识别这个名字F,因为没有这样的标签。如果Briggs是正确的并且F = None重置F为其原始状态,那么它应该现在就在那,我们应该看到>>> print(F)None就像我们在键入F = None并贴上贴纸后所做的那样None。这就是所有的事情。实际上,Python附带了一些已经粘贴到对象上的标签(内置名称),但是其他一些标签则需要使用诸如F = "fork"and A = 2和这样的行来编写c17 = 3.14,然后再将它们粘贴到其他对象上(例如F = 10or F = None;它们都是一样的) )Briggs假装您可能要写的所有可能的贴纸都已粘贴到该None对象上。

弑天下

None只是通常用于表示“空”或“此处无值”的值。它是一个信号对象 ; 它仅具有含义,因为Python文档说明了它的含义。在给定的Python解释器会话中,该对象只有一个副本。例如,如果您编写一个函数,但该函数未使用显式return语句,None则返回该函数。这样,使用函数进行编程就大大简化了;一个函数总是返回某些东西,即使它只是那个None对象。您可以明确地对其进行测试:if foo is None:&nbsp; &nbsp; # foo is set to Noneif bar is not None:&nbsp; &nbsp; # bar is set to something *other* than None另一个用途是为函数提供可选参数,默认为“空”:def spam(foo=None):&nbsp; &nbsp; if foo is not None:&nbsp; &nbsp; &nbsp; &nbsp; # foo was specified, do something clever!该函数spam()有一个可选参数。如果您在spam()未指定的情况下进行调用,则会为其指定默认值None,从而易于检测是否使用参数调用了该函数。其他语言也有类似的概念。SQL有NULL; JavaScript具有undefined 和 null,等等。请注意,在Python中,变量通过使用而存在。您无需先声明变量,因此Python 中没有真正的空变量。那么,将变量设置None为与将其设置为默认的空值是不同的。None也是一个值,尽管该值通常用于表示空白。您正在阅读的书在这一点上具有误导性。

慕容3067478

这是Python文档必须说的None:types.NoneType的唯一值。当没有将默认参数传递给函数时,通常不使用None来表示缺少值。在版本2.4中更改:分配为None是非法的,并引发SyntaxError。注意不能重新分配名称None和debug(分配给它们,即使作为属性名称也会引发SyntaxError),因此可以将它们视为“ true”常量。让我们确认None第一个的类型print type(None)print None.__class__输出量<type 'NoneType'><type 'NoneType'>基本上,NoneType数据类型类似于int,float等等。您可以在8.15中查看Python中可用的默认类型列表。types —内置类型的名称。并且,None是NoneType类的实例。因此,我们可能要创建None自己的实例。让我们尝试一下print types.IntType()print types.NoneType()输出量0TypeError: cannot create 'NoneType' instances很明显,无法创建NoneType实例。我们不必担心价值的独特性None。让我们检查一下我们是如何None内部实现的。print dir(None)输出量['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__',&nbsp;&nbsp;'__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__',&nbsp;'__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']除了__setattr__,所有其他均为只读属性。因此,我们无法更改的属性None。让我们尝试为添加新属性 Nonesetattr(types.NoneType, 'somefield', 'somevalue')setattr(None, 'somefield', 'somevalue')None.somefield = 'somevalue'输出量TypeError: can't set attributes of built-in/extension type 'NoneType'AttributeError: 'NoneType' object has no attribute 'somefield'AttributeError: 'NoneType' object has no attribute 'somefield'上面看到的语句分别产生这些错误消息。这意味着我们不能在None实例上动态创建属性。让我们检查一下分配东西时会发生什么None。根据文档,它应该抛出SyntaxError。这意味着,如果我们向分配某些内容None,则该程序将完全不会执行。None = 1输出量SyntaxError: cannot assign to None我们已经确定None 是...的实例 NoneTypeNone 不能有新属性的现有属性None无法更改。我们无法创建的其他实例 NoneType我们甚至不能通过None给它分配值来更改对它的引用。因此,如文档中所述,None可以真正将其视为true constant。很高兴知道None:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python