【问题标题】:The None Value/Code in Automate the Boring Stuff自动化无聊的东西中的无值/代码
【发布时间】:2019-10-18 11:24:10
【问题描述】:

文字内容如下:

在 Python 中有一个名为 None 的值,它表示没有值。 None 是 NoneType 数据类型的唯一值。 (其他编程语言可能将此值称为 null、nil 或 undefined。)就像布尔 True 和 False 值一样,None 必须用大写 N 键入。

当您需要在变量中存储一些不会与实际值混淆的东西时,这种没有值的值会很有帮助。一个使用 None 的地方是作为 print() 的返回值。 print() 函数在屏幕上显示文本,但它不需要像 len() 或 input() 那样返回任何内容。但由于所有函数调用都需要计算返回值,因此 print() 返回 None。要查看实际情况,请在交互式 shell 中输入以下内容:

>>> spam = print('Hello!')
Hello!
>>> None == spam
True

在幕后,Python 将 return None 添加到任何没有 return 语句的函数定义的末尾。这类似于 while 或 for 循环如何以 continue 语句隐式结束。此外,如果您使用没有值的 return 语句(即仅返回关键字本身),则返回 None。

我想我理解 None 是什么,但我不理解代码。为什么spam 在分配为print('Hello!') 时等于None?当我在分配后立即将spam 输入交互式shell 时,它什么也不返回。我有一种感觉,这是因为当调用 print() 并返回一个值时,参数 Hello! 会立即被遗忘,但如果我将 spam 定义为 print() 函数并传递参数 Hello! 应该它并不总是返回Hello!

【问题讨论】:

  • 因为print 返回None'Hello!' 是您传递给它的参数,它不会返回它;大多数函数返回它们的参数,因为调用者已经拥有它们
  • @jonrsharpe 但是print('Hello!') 不返回Hello!
  • 没有。正如我告诉过你的,你的实验清楚地表明,在它打印之后,它返回None
  • @RoryDaulton 感谢您了解我的困惑。我现在意识到我完全误读了这一章并且没有理解其中的区别。如果您愿意将您的评论作为答案,我会接受。
  • 不客气。我已将我的评论移至答案,并添加了一些小的补充。

标签: python function nonetype


【解决方案1】:

为了添加到 cmets 并更清晰,您的 print() 函数打印 'Hello!' 到屏幕并返回 None 到程序。打印和返回不是一回事——打印是给用户的,返回是给程序的。打印只进入屏幕并且(通常)不能被程序进一步使用。返回的值可以存储在变量中,例如spam,以供进一步使用。

打印和返回之间的区别非常重要,以至于 Python 标准是,如果函数打印某些内容,则不应返回除 None 之外的任何值,并且如果函数返回值则不应打印任何内容。许多其他语言(最臭名昭著的 C)没有遵循这个标准,Python 也没有始终如一地遵循这个标准,但是这种区别确实有助于 Python 的清晰性。如果您想进一步研究这个概念,请搜索编程中的“副作用”。

【讨论】:

  • 谢谢。我将进一步研究。
【解决方案2】:

您将spam 分配给不返回任何内容的print() 函数,即None

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多