假设我们在Python或IDLE shell中运行了这行代码:
print("hai")
屏幕上显示以下内容:
hai
这对我来说似乎违反直觉,因为print(arg)是一个void函数,因此在评估时返回None,总是; NoneType是python中的一种数据类型,但当表达式求值时,它不会显示在窗口上,而整数是:
5
使它出现在屏幕上(在shell上运行):
5
将这种非显示行为硬编码到python中只是NoneType数据的一个特性吗?
我问这个问题是因为在所谓的“输出”中似乎存在模糊性,而我担心这种模糊性会使我的中期条件变得非常灾难性。例如,考虑这行代码......
...在shell中运行:
5
使它出现在屏幕上:
5
...编译并运行:
5
不会在屏幕上显示任何内容。
--
表达式5通常在Python中求值为整数5,但是整数5是一个输出,其方式与...相同。
print(5)
...屏幕上输出“5”?那个print(5)函数调用求值的NoneType数据对象怎么样;那也是输出吗?
我想我的问题的实际后果是这个;说有人问你这个问题:
这行代码的输出是什么?:
print(5)
答案是正确的:
(一个)。
5
没有
(b)中。
5
要么
(C)。
没有 ?
为了更好的衡量,这个问题怎么样:
这行代码的输出是什么?:
5
答案是正确的:
(一个)。
要么
(b)中。
5
上述两个问题的答案取决于几个方面:
这是一个有点UNIX的描述,但稍微调整也适用于Windows。
每个进程在首次启动时都有三个打开的文件描述符,这些描述符用数字表示。文件描述符0打开以供读取,通常称为标准输入。文件描述符1和2打开用于写入,并且通常分别称为标准输出和标准错误。
通过“输出”,我们通常表示“写入标准输出的东西”。在print
函数的情况下,其目的是将一些数据写入打开的文件描述符,默认情况下是标准输出。这是否可见取决于为标准输出打开的文件。
交互式解释器通常将您的终端作为其标准输出。 (请记住,Unix中的许多内容都表示为文件,无论它们是否是存储在磁盘上的字节可寻址对象。)因此,当您执行print
时,它会向您的屏幕写入一些内容。
但是,交互式解释器还会将您在提示符下键入的每个表达式的值写入标准输出,这使得它成为一个交互式解释器而不仅仅是一个解释器。您在提示符下键入的任何表达式foo
都被视为print(foo)
。 (例外情况是,如果返回值是None
;作为NoneType
的唯一值,函数返回None
的事实并不真正提供任何信息,因此认为没有必要将其值打印到屏幕上。该参数实际上仅适用如果函数只能返回None
,因为返回None
和1
之间显然存在差异,但就输出而言,你仍然可以看到解释器在foo(5)
返回时为1
放置1或者没有任何区别或者None
。)
在决定是否有“输出”时,最好将其输入到文件中,并执行该文件有脚本。像3 + 5
这样的简单表达式不会有任何隐式输出;该脚本将作为所谓的表达式语句进行评估,并生成但以其他方式丢弃8的结果。
正确的答案取决于你与谁交谈。如果这是一个中期,我建议迂腐。
实际上,输出可以是返回值,打印到屏幕上的内容,或网络请求等。在工业中,我们通常因为背景而知道差异。
你在这里有两个想法,即在堆栈上返回的东西,以及发出明显副作用的东西。
当您在期中看到问题What is the output of this line of code?: print(5)
时,如果您想要完成,可以说“这在标准输出上显示5并返回无”。
如果您有多项选择题,则必须从上下文中推断出这一点。如果您有'5'和'无'作为两个不同的选项,请走向教授并在考试期间询问“您是指发送到标准的内容还是返回值是什么”。