在Python模块中初始化静态列表的最佳方法

4

我有两个Python模块:user.py和lib.py。lib.py包含某些以以下方式编写并从user.py模块调用的函数:

def foo1():
    pass

def foo2():
    pass

def foo3():
    pass

现在我想在lib.py模块中添加一个静态字符串列表,以便lib.py模块中的所有函数都可以使用它们。我想以以下方式严格初始化字符串列表:
string_list = []
string_list.append('string1')
string_list.append('string2')
string_list.append('string3')
string_list.append('string4')

什么是最Pythonic的方法来实现这一点?是否可能做一些像这样的事情,这将完美地工作?
string_list = []
string_list.append('string1')
string_list.append('string2')
string_list.append('string3')
string_list.append('string4')

def foo1():
        print string_list[0]

    def foo2():
        print string_list[1]

    def foo3():
        print string_list[2]

如果你想要写出 Pythonic 的代码,请将 string_list 变成 fooN 函数的参数,例如 def foo(string_list, n): print string_list[n] - jonrsharpe
你可能想把变量名改为_string_list而不是string_list,以减少用户覆盖它的机会。http://docs.python.org/2/tutorial/classes.html#tut-private - MaSp
我认为string_list是全局变量而不是静态变量。 - Kei Minagawa
2个回答

9

只需使用 Python 列表字面量:

string_list = ['string1', 'string2', 'string3', 'string4']

如果你只是创建一个预定义大小和内容的列表,就没有必要调用list.append() 4次。


如果我想使用append方法而不是列表字面值怎么办? - Rafay
5
@MohammadRafayAleem:那就去做吧。虽然毫无意义,但它完全可以工作。然而,你要求最Pythonic的方法;既然你只是添加永远不会改变的字符串,为什么要这么啰嗦呢? - Martijn Pieters
1
我同意你的观点。谢谢你的回答。 - Rafay
@MartijnPieters 哈哈,如果没有在 + 周围加上空格,你本可以节省一个字符! - jonrsharpe
1
@jonrsharpe:当你可以在其他地方使用+ 1时,我对从1开始使用range()有一种不合理的厌恶感... - Martijn Pieters
显示剩余2条评论

1
在这种情况下,你也可以使用组合...
stringList = ['string'+str(i+1) for i in range(4)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接