chi*_*org 4 python refactoring design-patterns file
使用Python代码中的多个文件时,使用推荐的样式时会变得很难看:
with open("foo.txt") as foo:
with open("bar.txt", "w") as bar:
with open("baz.txt", "w") as baz:
# Read from foo, write different output to bar an baz
Run Code Online (Sandbox Code Playgroud)
这是用于处理文件的三个缩进级别!替代方案是这样的
foo = open("foo.txt")
bar = open("bar.txt", "w")
baz = open("baz.txt", "w")
# Read from foo, write different output to bar an baz
foo.close()
bar.close()
baz.close()
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,这些例子中的任何一个都可以重构为更优雅的东西.任何例子?
Mar*_*ers 12
Python 2.7及更高版本允许您在一个with
语句中指定多个上下文管理器:
with open("foo.txt") as foo, open("bar.txt", "w") as bar, open("baz.txt", "w") as baz:
# Read from foo, write different output to bar an baz
Run Code Online (Sandbox Code Playgroud)
该行确实变长,您不能使用括号将其保持在80个字符以下.\
但是,您可以使用反斜杠延续:
with open("foo.txt") as foo,\
open("bar.txt", "w") as bar,\
open("baz.txt", "w") as baz:
# Read from foo, write different output to bar an baz
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用contextlib.ExitStack()
上下文管理器(仅在Python 3.3及更高版本中):
from contextlib import ExitStack
with ExitStack() as stack:
foo = stack.enter_context(open("foo.txt"))
bar = stack.enter_context(open("bar.txt"))
baz = stack.enter_context(open("baz.txt"))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1600 次 |
最近记录: |