Python:多次创建一个小列表有多贵?

Gab*_*iMe 9 python

我在Python中一遍又一遍地遇到以下小烦恼的困境:

选项1:

如果多次调用,因为为每次调用do_something()重新创建a_list,所以更干净但更慢(?)

def do_something():    
  a_list = ["any", "think", "whatever"]    
  # read something from a_list
Run Code Online (Sandbox Code Playgroud)

选项2:

更丑但更有效率(重新创建a_list创建)

a_list = ["any", "think", "whatever"]    
def do_something():    
  # read something from a_list
Run Code Online (Sandbox Code Playgroud)

你怎么看?

Joh*_*hin 16

它有什么难看的?

列表的内容是否始终是常量,如示例中所示?如果是这样的话:Python的最新版本(从2.4开始)将通过评估常量表达式并保持结果来优化它,但前提是它只是一个元组.所以你可以把它变成一个元组.或者你可以不再担心那样的小事.

这是一个常量列表和一个常量元组:

>>> def afunc():
...    a = ['foo', 'bar', 'zot']
...    b = ('oof', 'rab', 'toz')
...    return
...
>>> import dis; dis.dis(afunc)
  2           0 LOAD_CONST               1 ('foo')
              3 LOAD_CONST               2 ('bar')
              6 LOAD_CONST               3 ('zot')
              9 BUILD_LIST               3
             12 STORE_FAST               0 (a)

  3          15 LOAD_CONST               7 (('oof', 'rab', 'toz'))
             18 STORE_FAST               1 (b)

  4          21 LOAD_CONST               0 (None)
             24 RETURN_VALUE
>>>
Run Code Online (Sandbox Code Playgroud)