在我的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 方法中常见的参数吗?还是你要区分这两者?如何最好地实现它?