我正在学习Automate那些无聊的东西,我注意到他教开放模块是这样的:
baconFile = open('bacon.txt', 'w')
baconFile.write('Bacon is not a vegetable.')
baconFile.close()为什么我们需要baconFile变量呢?我理解易于阅读/调试,但是,当我尝试以下代码时,文本不会输入到.txt文件中:
open('bacon.txt', 'w').write('Bacon is not a vegetable.')
open('bacon.txt', 'w').close()为什么?这两者之间的区别是什么?
编辑:人们说我在底部的代码中再次打开它。这不是我在顶层代码中所做的吗?我以为变量只是我不想再输入的代码的替代品。
发布于 2020-02-03 04:10:50
在您的版本中,您创建了两个文件处理程序(类似于原始示例中的baconFile ),每次调用open时都会创建一个处理程序,它们处理相同的文件。baconFile 不是一个文件,它是一个处理文件的对象。
你用来写一些文本的第一个。你永远不会关闭它,当你的程序结束时,它将被销毁。
当您在w模式下打开第二个文件时,它将重置文本内容,然后您将其关闭。
发布于 2020-02-03 04:15:04
step 1. open the file to write.
step 2. write something in the file.
step 3. close the file.您正在尝试打开一个打开的文件。
发布于 2020-02-03 04:32:13
,我认为变量只是我不想再输入的代码的替代品。
这是一个外行术语对的描述。
只有当你在处理纯函数,即没有副作用的函数时,它才有效。例如,
def double(x):
return 2 * x
a = double(5)
b = a + a等同于
b = double(5) + double(5)但在Python中,函数通常不是纯函数。Assignment的工作方式是对右侧求值一次,然后将其绑定到左侧的名称。使用名称仅引用计算表达式的值,但不会重复其可能产生的副作用。
所以如果相反,
def double(x):
print('doubling', x)
return 2 * x然后
a = double(5)
b = a + a不再等同于
b = double(5) + double(5)在这两种情况下,b仍然是20,但是第一种情况打印doubling 5一次,第二种情况打印两次。
open('bacon.txt', 'w')有打开文件并截断它的副作用,它的计算结果是一个值,即文件句柄。
在您的示例中,
open('bacon.txt', 'w').write('Bacon is not a vegetable.')
open('bacon.txt', 'w').close()等同于:
f = open('bacon.txt', 'w')
f.write('Bacon is not a vegetable.')
g = open('bacon.txt', 'w')
g.close()这意味着文件被打开并被截断一次,然后向其中写入一些内容。然后,它被打开并再次被截断,丢失了您之前编写的内容。
https://stackoverflow.com/questions/60030086
复制相似问题