Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较两个浮点值时为同一代码获取不同的输出_Python_Python 3.x - Fatal编程技术网

Python 比较两个浮点值时为同一代码获取不同的输出

Python 比较两个浮点值时为同一代码获取不同的输出,python,python-3.x,Python,Python 3.x,我曾在python中尝试过相同的代码,曾经作为.py文件运行过,也曾经在IDLE中键入过,但它为相同的代码提供了不同的输出: a = 3.4 b = 3.4 a is b 我附上了两种方法尝试时拍摄的屏幕截图: 左窗口返回false而右窗口返回true的原因是,您键入的每个命令都是一个块,如下所述: Python程序由代码块构造而成。块是作为一个单元执行的一段Python程序文本。以下是模块、函数体和类定义。以交互方式键入的每个命令都是一个块 因此,当您使用控制台时,您键入的每个命令都被视为一

我曾在python中尝试过相同的代码,曾经作为
.py
文件运行过,也曾经在IDLE中键入过,但它为相同的代码提供了不同的输出:

a = 3.4
b = 3.4
a is b
我附上了两种方法尝试时拍摄的屏幕截图:


左窗口返回false而右窗口返回true的原因是,您键入的每个命令都是一个块,如下所述:

Python程序由代码块构造而成。块是作为一个单元执行的一段Python程序文本。以下是模块、函数体和类定义。以交互方式键入的每个命令都是一个块

因此,当您使用控制台时,您键入的每个命令都被视为一个块。每个块都有可重用的常量。在你的例子中,3.4是一个常数。但是,当您键入第二个命令时,它被视为一个新块,因此它找不到可以重用的常量。在使用.py文件的第二种情况下,常量被保存并重用,因为文件被视为单个代码块

检查这一点的一种方法是在同一行上声明两个变量,如下所示:

>a=3.4;b=3.4;
>>>打印(a是b)
这将输出True,因为您在同一个命令中声明了两个变量,因此阻塞


但是,如果您试图仅比较两个变量,则应使用
==
。请记住,在执行浮点比较时,请查看此stackoverflow,了解如何最好地执行此操作:

左窗口返回false而右窗口返回true的原因是因为您键入的每个命令都是一个块,如中所述:

Python程序由代码块构造而成。块是作为一个单元执行的一段Python程序文本。以下是模块、函数体和类定义。以交互方式键入的每个命令都是一个块

因此,当您使用控制台时,您键入的每个命令都被视为一个块。每个块都有可重用的常量。在你的例子中,3.4是一个常数。但是,当您键入第二个命令时,它被视为一个新块,因此它找不到可以重用的常量。在使用.py文件的第二种情况下,常量被保存并重用,因为文件被视为单个代码块

检查这一点的一种方法是在同一行上声明两个变量,如下所示:

>a=3.4;b=3.4;
>>>打印(a是b)
这将输出True,因为您在同一个命令中声明了两个变量,因此阻塞


但是,如果您试图仅比较两个变量,则应使用
==
。请记住,您正在进行浮点比较,请查看此stackoverflow,了解如何最好地进行比较:

这不是“对象比较”。这是检查
a
b
是否引用了内存中的同一对象。可能重复:嗨,Tharmila,欢迎使用SO!在问下一个问题之前,请仔细阅读。快乐编码!你能帮我调试一下吗。请在两侧执行:
print(id(a))print(id(b))
这将返回变量指向的内部对象的id。这不是“对象比较”。这是检查
a
b
是否引用了内存中的同一对象。可能重复:嗨,Tharmila,欢迎使用SO!在问下一个问题之前,请仔细阅读。快乐编码!你能帮我调试一下吗。请执行以下操作:
print(id(a))print(id(b))
这将返回变量指向的内部对象的id。这并不能解释为什么控制台和脚本中的结果不同,但为什么它为同一代码提供了不同的输出?(在脚本中和运行文件时)@ForceBru它现在已更新。我会尽量说得更清楚tho@GertjanBrouwer,嗯,这是一个有趣的方法-我还没有看到关于这种使用块的现象的解释。是否有任何关于每个块是否必须有其唯一的对象副本的信息,如
3.4
?这里描述了数据模型:它声明每个块都有其自己的对象副本。这并不能解释为什么控制台和脚本中的结果不同,但,为什么它为同一代码提供不同的输出?(在脚本中和运行文件时)@ForceBru它现在更新了。我会尽量说得更清楚tho@GertjanBrouwer,嗯,这是一个有趣的方法-我还没有看到关于这种使用块的现象的解释。是否有任何关于每个块是否必须有其对象的唯一副本的信息,如
3.4
?这里描述了数据模型:它表示每个块都有其对象的副本。