【发布时间】:2018-11-05 16:44:21
【问题描述】:
问候程序员,
我有一个特别的问题要问——更准确地说是关于分配变量时 python 的行为。让我们假设这段代码(取自 Tensorflow 的指南):
(train_images, train_labels), (test_images, test_labels) = keras.datasets.fashion_mnist.load_data()
我明白,我不能执行以下操作:
train_images /= 250.0
-对象train_images不可写,因此我无法更改它。
但我绝对可以做以下,我不明白:
train_images = train_images / 250.0
这是否意味着当我“重新分配”变量 train_images 时,python 会以某种方式自动忘记旧变量并将 train_images 构造为新变量?
请原谅我缺乏 python 的行为知识 - 如果有一个明显的答案,只需发布一些解释链接或描述此案例的一些文档。
非常感谢您,祝您有愉快的一天!
编辑:
“不可写”是指该对象是只读的(当我们打印数组的描述 print( train_images.flags ) 时,我们会从 WRITEABLE : False 的行之一中获取信息
更具体地说,当使用train_images /= 250.0 时,程序终止并输出以下错误:
Traceback (most recent call last):
File "code_01_fashion.py", line 31, in <module>
train_images /= 250.0
ValueError: output array is read-only
另一方面,train_images = train_images / 250.0 运行良好。
【问题讨论】:
-
您确定
train_images /= 250.0不起作用吗?对于不可变值,它应该与train_images = train_images / 250.0一样对待,否则x = 1; x /= 250.0将不起作用。train_images是什么类型? -
我不知道你所说的“不可写”是什么意思。 train_images 的类型是什么?当您尝试
/=操作时,您究竟会遇到什么错误? Python 不会以您声称的方式区分这些操作。你可以有不可变的类型(例如元组),但这仍然有效。 -
用
train_images /= 250.0解释器终止程序并打印错误:Traceback (most recent call last): File "code_01_fashion.py", line 31, in <module> train_images /= 250.0 ValueError: output array is read-only
标签: python variables python-3.6 variable-assignment