【发布时间】:2021-07-28 16:18:59
【问题描述】:
我的 Python 包中的一个常见要求是允许文件输入为字符串文件名、pathlib.Path 或已打开的缓冲区。我通常像
那样分离出缓冲区def foo_from_file(filename, *args, **kwargs):
with open(filename) as f:
foo_from_buffer(f, *args, **kwargs)
def foo_from_buffer(f):
f.readline()
# do something
return
但从用户的角度来看,一种更简洁的方法可能是
def foo(file_or_buffer):
if hasattr(file_or_buffer, "readline"): # ???
f = file_or_buffer
else:
f = open(file_or_buffer)
f.readline()
(这个特定的实现不是很好,因为它在失败时不会close()。)
file_or_buffer 是 Python 方法中的常见参数,还是您将两者分开?如何最好地实现它?
【问题讨论】: