2

我经常看到接受各种输入的 Python 代码......

文件名

s = Something("/Users/me/my_file.txt")

文件路径

s = Something("my_file.txt")

或文件对象

f = open("my_file.txt", "r")
s = Something(f)

这有约定吗?正如很多人提到的,这取决于是什么something()。什么情况下更适合文件名与文件对象?

我想知道这个SO 帖子是否给出了最好的答案。

4

3 回答 3

4

json有两种加载数据的方法:json.load一种是类文件对象,另json.loads一种是字符串:

>>> json.load(open("my_file.json"))
[1, 2]
>>> json.loads("[1, 2]")
[1, 2]

pickle模块具有类似的接口(一个接受文件对象,第二个接受字符串)

本质上,您的 API 主要使用文件对象,并且您提供了一种方便的方法,该方法将提供的字符串包装在StringIOobject中。可能看起来像这样:

class Parser(object):
    def __init__(self, fh):
        # Can do things like:
        first_line = fh.readline()
        fh.seek(0)
        all_content = fh.read()


def parse(fh):
    return Parser(fh)


def parse_str(inputstring):
    fh = StringIO.StringIO(inputstring)
    return Parser(fh)
于 2012-08-29T20:46:10.420 回答
2

这一切都取决于Something(). 我不知道这样说有一个严格的约定是否公平。鸭子类型的好处是你不需要知道函数参数的类型,只需要知道参数行为的某些方式。

于 2012-08-29T19:27:01.583 回答
0

它认为没有任何适用的约定。这完全取决于您的程序想要实现的目标。

于 2012-08-30T00:59:52.280 回答