在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ 在python中使用 with open,為什么一定要加后綴as?

在python中使用 with open,為什么一定要加后綴as?

as的意思不是為文件重命名嗎,難道在這里有什么特殊的意義?

加入as,執(zhí)行成功

沒(méi)有as,執(zhí)行失敗

回答
編輯回答
歆久

as 不是重命名原文件。
as 是代表打開(kāi)后的文件句柄。比如 f = open(file_1,'w'),as 后面那個(gè)相當(dāng)于這個(gè) f 變量。之所以用with是因?yàn)閣ith是一個(gè)上下文管理器,可以自動(dòng)關(guān)閉文件。不需要主動(dòng)去調(diào)用f.close().

2018年8月4日 22:33
編輯回答
舊酒館

with as 是 上下文管理器,利用Python的魔法方法實(shí)現(xiàn)的。
參考 上下文管理器 - 魔術(shù)方法

2017年7月28日 08:21
編輯回答
拼未來(lái)

打印下他們的類(lèi)型,發(fā)現(xiàn)類(lèi)型不一致。

In [5]: import json 
In [6]: num = [1,2,3,4,5,6,7]
In [7]: file_1 = 'first.json'
In [8]: with open(file_1,'w') as joe:
   ...:     print(type(joe))
   ...:     json.dump(num, joe)
   ...:     
<class '_io.TextIOWrapper'>
In [14]: import json 
In [15]: num = [1,2,3,4,5,6,7]
In [16]: file_1 = 'first.json'
In [17]: with open(file_1, 'w'):
    ...:     print(type(file_1))
    ...:     json.dump(num, file_1)
    ...:     
    ...:     
    ...:     
<class 'str'>
AttributeError: 'str' object has no attribute 'write'

第二段代碼
雖然使用了open方法打開(kāi)文件,但是還是用了直接字符串對(duì)象file_1,相當(dāng)于沒(méi)有open這一步驟。
等價(jià)于以下代碼:

import json
file_1 = 'first.json'
json.dump(num, file_1)

而字符串本身是沒(méi)有寫(xiě)入這個(gè)方法的,因此報(bào)錯(cuò):AttributeError: 'str' object has no attribute 'write'

不想要with 可以講打開(kāi)的對(duì)象賦值給f = open(file_1,'w')

2017年10月24日 07:22