[英]context manager and helper function in python
我有一些使用上下文管理器的函數:
def f1():
with open("test.txt","r+") as f:
f.write("common Line")
f.write("f1 Line")
def f2():
with open("test.txt","r+") as f:
f.write("common Line")
f.write("f2 Line")
def f3():
with open("test.txt","r+") as f:
f.write("common Line")
f.write("f3 Line")
這些函數有一些共同的行。 所以我想添加一個輔助函數。 像這樣的東西
def helperF():
with open("test.txt","r+") as f:
f.write("common Line")
然后以某種方式從我的 f1,f2,f3 函數中調用它以使代碼干燥。
但我不太確定在這種情況下如何處理上下文管理器。 以下將不起作用,因為在調用函數時 f 已經關閉:
def f1():
commonHelper()
f.write("f1 Line")
def f2():
commonHelper()
f.write("f2 Line")
def f3():
commonHelper()
f.write("f3 Line")
如果這三個函數每個都向文件寫入相當多的內容,我會建議重構,以便它們返回要寫入的字符串列表,而不是讓多個函數直接寫入文件。
def write_with_common_header(lines):
with open("test.txt", "r+") as f:
f.write("common Line")
for line in lines:
f.write(line)
def f1():
return ["f1 Line"]
def f2():
return ["f2 Line"]
def f3():
return ["f3 Line"]
# usage example:
write_with_common_header(f2())
如果每個函數返回的列表總是相同的,那么它們甚至不需要是函數; 您可以將它們聲明為列表。
在上下文管理器不一定是文件的更一般情況下,單獨的函數不僅僅是調用單個方法,那么我們不能將它們作為數據傳遞,但可以應用相同的技術:使write_with_common_header
函數接受一個參數,以便其行為可以參數化。 為了完全通用,參數應該是一個函數,它接受對托管資源f
的引用。
def common_helper(callback):
with open("test.txt", "r+") as f:
f.write("common Line")
callback(f)
def f1(f):
f.write("f1 Line")
def f2(f):
f.write("f2 Line")
def f3(f):
f.write("f3 Line")
# usage example:
common_helper(f2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.