我想創建一個接受3個參數的函數,每個參數都可以傳遞給open
函數,我的函數會傳遞到open
然後使用它,或者它可以是一個文件對象,然後我的函數可以在不需要打開它的情況下使用它。如何創建一個接受每個1參數爲一種類型或另一種類型的函數?
因此,它是這樣的
def work_with_files(file1, file2, file3):
files_to_close = []
file_objects = []
try:
for file in (file1, file2, file3):
if not is_file_object(file):
opened_file = open(file.argument_for_open)
file_objects.append(opened_file)
files_to_close.append(opened_file)
else:
file_objects.append(file.file_object)
work_with_files(file_objects)
finally:
for file in files_to_close:
file.close()
在C++中我會用boost::variant
,在Haskell我可能會使用Either
。什麼是最Python的方式來做到這一點?我應該通過什麼作爲參數,以及is_file_object
應該如何工作?
如果有什麼它實際上不是一個文件,而是一個文件 - 像StringIO一樣的對象? – CrabMan
@CrabMan我沒有任何想法mayve StringIO模塊可以幫助你https://docs.python.org/2/library/stringio.html#module-StringIO – Kasramvd
我實際上並不關心StringIO。我只是想將任何類似文件的對象傳遞給函數。 – CrabMan