with open('data.txt','w')as f:自动调用f.close问题
try:
with open('data.txt','w')as f:
for each in f:
print(each)
except OSError as reason:
print('出错:'+str(reason))
P35讲最后一个例子不懂 ,不懂的点在
with open('data.txt','w')as f:小甲鱼说with会关注open('data.txt','w') 什么时候不用,不用的时候会自动调用f.close()
请问我as后面gender是f,怎么会自动调用f.close呢?我的逻辑是应该写成 with open('data.txt','w')as f.close:
....
请大神帮忙解答 本帖最后由 suchocolate 于 2021-9-11 21:45 编辑
with open('data.txt','r') as f:
读取得用r。with方式的自动就是不需要主动写close,不然跟写f=open('xxx')就没区别了。
文件操作:https://www.runoob.com/python3/python3-file-methods.html suchocolate 发表于 2021-9-11 21:39
你这是读取,得用r。
文件操作:https://www.runoob.com/python3/python3-file-methods.html
你好,可能题意理解错了。这节课讲的是错误代码,with open('data.txt','w') as f: 用的是打开文件并写入,然后逐行读取,输出 for each in f:print(each),故意空文件,读取报错, 我纠结的是为什么as 后面跟的是f,f我并没有定义,为什么会在不适用的时候默认是f.close() peichao 发表于 2021-9-11 21:46
你好,可能题意理解错了。这节课讲的是错误代码,with open('data.txt','w') as f: 用的是打开文件并写 ...
f是文件的句柄,with open('data.txt','w') as f:的作用相对应
f = with open('data.txt','w') ,只是多了自动关闭文件的功能。
我改写了程序,可能看的更清楚些
try:
with open('data.txt','w')as f:
f.write('123\n')
a = 3 / 0
f.write('456\n')
except ZeroDivisionError as reason:
print('出错:'+str(reason))
运行后,打开文本文件会有123数据,说明用with可以在出错时仍然会替你关闭文件。
对比一下
f = open('data2.txt','w')
f.write('123\n')
a = 3 / 0
f.write('456\n')
f.close()
data2文件是空的,说明没有关闭文件,所以123也没有写入 为什么是 f?
因为 f 只是一个代号而已,你也改成别的,例如 s,file 等等,这都无所谓的,只是为了把这个文件作为缩写而已。方便你在下边的代码中使用。 本帖最后由 阿奇_o 于 2021-9-12 10:24 编辑
为什么as 后面跟的是f,f我并没有定义....
定义一个变量,有多种方式,不只是最常见的 a = 1, f = open(...),
这里的 with 语句,with open(...) as f 这样也是一种变量声明(定义),
声明的本质是把一个任意合法的变量名(标识符)关联指向一个对象(这里是open()返回的文件对象),
即 变量名 你叫 张三、李四都行,只要你正确且合法地关联到一个对象上,它都是可以的。
类似的还有 import语句, import pandas as pd 这种也是,变量名pd 关联指向了 pandas 这个模块对象。
至于为什么会自己调用 f.close() , 这个没什么好解释的了,因为它就是为了这个而存在的,方便,
不用手动写close(),这是with语句的特性,不用担心忘了写close() 而导致资源占用等问题。
若还想深究下去,那你就去了解了解:什么叫"上下文管理"?
—— 文件对象 的类 定义了__enter__ , __exit__,于是它就是一种"上下文管理"的实现,于是它就可以用 with 语句。
{:10_248:} 冬雪雪冬 发表于 2021-9-11 21:52
f是文件的句柄,with open('data.txt','w') as f:的作用相对应
f = with open('data.txt','w') ,只是多 ...
谢谢你 懂了 江湖散人 发表于 2021-9-12 09:29
为什么是 f?
因为 f 只是一个代号而已,你也改成别的,例如 s,file 等等,这都无所谓的,只是为了把这个 ...
第一次发帖,好多人都给出了 可以理解的答案,论坛大爱呀。谢谢 peichao 发表于 2021-9-12 21:28
第一次发帖,好多人都给出了 可以理解的答案,论坛大爱呀。谢谢
没事,一起学习么!
页:
[1]