在本文中,您将会了解到关于在Python中,如果我在“with”块内返回,文件还会关闭吗?的新资讯,同时我们还将为您解释pythonwithreturn的相关在本文中,我们将带你探索在Python中,
在本文中,您将会了解到关于在 Python 中,如果我在“with”块内返回,文件还会关闭吗?的新资讯,同时我们还将为您解释python with return的相关在本文中,我们将带你探索在 Python 中,如果我在“with”块内返回,文件还会关闭吗?的奥秘,分析python with return的特点,并给出一些关于delphi – 重构“with”块的工具、PHPUnit“with”matcher with array和$this-> anything()、Python GC也会关闭文件吗?、python – 用于打开具有两个函数的文件的“with”语法的实用技巧。
本文目录一览:- 在 Python 中,如果我在“with”块内返回,文件还会关闭吗?(python with return)
- delphi – 重构“with”块的工具
- PHPUnit“with”matcher with array和$this-> anything()
- Python GC也会关闭文件吗?
- python – 用于打开具有两个函数的文件的“with”语法
在 Python 中,如果我在“with”块内返回,文件还会关闭吗?(python with return)
考虑以下:
with open(path, mode) as f: return [line for line in f if condition]
文件会正确关闭,还是使用return
某种方式绕过上下文管理器?
答案1
小编典典是的,它就像一个finally
块之后的try
块,即它总是执行(当然,除非 python 进程以不寻常的方式终止)。
在PEP-343的示例之一中也提到了它,它是with
语句的规范:
with locked(myLock): # Code here executes with myLock held. The lock is # guaranteed to be released when the block is left (even # if via return or by an uncaught exception).
然而,值得一提的是,如果open()
不将整个with
块放入try..except
通常不是人们想要的块中,您将无法轻松捕获调用引发的异常。
delphi – 重构“with”块的工具
with Form1 do begin Height := Blah; Blubb := Name; end;
至
Form1.Height := Blah; Blubb := Form1.Name;
其中Form1是VCL TForm.最好它应该与Delphi 2007一起使用.
解决方法
PHPUnit“with”matcher with array和$this-> anything()
就像是:
$stmt->execute(array ('value1','value2',date('Ymd'));
问题是我的断言是使用$this-> anything()来表示日期函数结果.我认为它正在打破,因为它在阵列中.有没有一个好方法来处理这个?
我的断言看起来像:
$mock->expects($this->once()) ->method('execute') ->with(array ('value1',$this->anything()));
解决方法
在您的情况下,该方法将收到一个参数,因此您将使用单个验证.您不能使用通用验证,因此您将使用回调检查阵列内部:
$mock->expects($this->once()) ->method('execute') ->with($this->callback(function($array) { return 'value1' == $array[0] && 'value2' == $array[1] && 3 == count($array); }));
这在PHPUnit docs中有解释.
Python GC也会关闭文件吗?
考虑下面的Python(2.x)代码:
for line in open('foo').readlines():
print line.rstrip()
我假设由于打开的文件仍然未被引用,因此必须自动关闭它。我已经阅读了有关Python中的垃圾收集器的信息,该垃圾收集器可释放未使用对象分配的内存。GC是否也足以处理文件?
python – 用于打开具有两个函数的文件的“with”语法
with open(fname,'r') as f: # do something pass
但如果我发现它以.gz结尾,我会调用gzip.open().
if fname.endswith('.gz'): with gzip.open(fname,'rt') as f: # do something pass else: with open(fname,'r') as f: # do something pass
如果“做某事”部分很长并且不方便在函数中写入(例如,它会创建一个无法序列化的嵌套函数),使用gzip.open或基于返回的打开调用的最短方法是什么? fname.endswith( ‘广州’)?
解决方法
但是,您不必创建用作上下文管理器的对象,同时使用它来输入上下文. open()和gzip.open()调用返回一个恰好是上下文管理器的新对象,您可以在输入上下文之前创建它们:
if fname.endswith('.gz'): f = gzip.open(fname,'rt') else: f = open(fname,'r') with f: # do something
在这两种情况下,对象在进入上下文时返回self,因此这里不需要使用f作为f.
此外,函数是一等公民,因此您还可以使用变量来存储函数,然后在with语句中调用它来创建上下文管理器和文件对象:
if fname.endswith('.gz'): opener = gzip.open else: opener = open with opener(fname,'rt') as f: # yes,both open and gzip.open support mode='rt' # do something
这并没有真正为你带来任何其他方法,但你可以使用字典将扩展名映射到callables,如果你愿意的话.
底线是calls context-manager hook methods,没有更少,仅此而已.应用之后的表达式应该提供这样的管理器,但是创建该对象不受上下文管理协议的约束.
关于在 Python 中,如果我在“with”块内返回,文件还会关闭吗?和python with return的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于delphi – 重构“with”块的工具、PHPUnit“with”matcher with array和$this-> anything()、Python GC也会关闭文件吗?、python – 用于打开具有两个函数的文件的“with”语法的相关知识,请在本站寻找。
本文标签: