Python,检查是否在';与';陈述
我正在实现我的自定义Python,检查是否在';与';陈述,python,with-statement,Python,With Statement,我正在实现我的自定义open()函数(我们称之为myOpen())。任务是,我希望能够将此函数与with语句(with myOpen(…)作为myFile:)一起使用。据我所知,open()必须返回file对象(TextIO或BinaryIO)。但是open()在with语句的上下文中不是一个函数,而是一个类,它实现了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你有什么想法,如何把这
open()
函数(我们称之为myOpen()
)。任务是,我希望能够将此函数与with
语句(with myOpen(…)作为myFile:
)一起使用。据我所知,open()
必须返回file对象(TextIO
或BinaryIO
)。但是open()
在with
语句的上下文中不是一个函数,而是一个类,它实现了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你有什么想法,如何把这两件事结合起来?
谢谢大家! 使用with
语句仍然返回\u io.x
类
>>类型(打开(“U文件”)
>>>将打开的(“U文件”作为o:打印(类型(o))
...
with
语句只为代码块分配另一个变量。
例如:
defFive():
返回5
打印(五个())#->5
打印(键入(five())#->int
将five()作为x:
打印(x)#->5
打印(键入(x))#->int
打印(x)#->5
with
语句相当于
x=five()
打印(x)
打印(类型(x))
或者,对于文件IO
:
handle=打开(“文件”)
#做事要谨慎
好吧,我知道哪里出了问题。一开始我认为,只能在类上调用with
语句,该类具有这些神奇的方法(\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。因此:
使用类\u,该类\u将这些\u方法作为\u的返回值\u输入:
通过
但效果不同。带
的之后的表达式也可以是函数,但它必须返回类的实例,该类实现了这些神奇的方法。我认为,这也是python的open
工作方式。它是一个函数,返回文件对象(更准确地说是包装器):
>类型(打开)
>>>类型(打开('file','w'))
文件对象实现了这些神奇的方法:
>a=open('file','w')
>>>处长(a)
[…'uuu dir_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
所以为了解决我原来的问题,myOpen()
必须是函数,它返回file对象,其中包含\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,它有效地分配了y=x()。\uuuuu enter\uuuu()
@Peter调用,其中x()
是函数,给了我AttributeError:\uuu enter\uuuuuu
(Python3.9.5)啊,nvm,我重新阅读了这个问题,答案是不,你不能将上下文管理器和函数结合起来做这两件事。但是,您可以这样设计一个类:逻辑在\uuuuu init\uuuuuu
中完成,只需要def\uuuuu enter\uuuuuuu(self):返回self
。这样,无论是否使用with
,您都会得到相同的结果。谢谢,好的,with five()as x
会给我属性错误:\uuuu enter\uuu
(python 3.9.5)。另一个问题是如何在myOpen()
中处理\uuu退出\uuu
?当with
语句存在时,如何关闭myOpen()
函数中的file descriprot?使用\uuuuuuu enter\uuuu
和\uuuu exit\uuuuu
方法为您的特殊文件句柄创建一个类。