Python:函数内部循环良好实践与否

时间:2018-03-09 16:04:58

标签: python

我们可以在Python中的任何地方定义函数,这非常方便。但是在循环中定义函数是一个好习惯吗?它会在运行时引起任何不必要的开销吗?

1 个答案:

答案 0 :(得分:2)

正如@cᴏʟᴅsᴘᴇᴇᴅ指出的那样,每次都会重新创建该函数,这可以通过dis.dis看到:

>>> import dis
>>> code = """
... for i in range(3):
...     def foo(j):
...         print(j)
...     foo(i)
... """
>>> dis.dis(code)
  2           0 SETUP_LOOP              32 (to 34)
              2 LOAD_NAME                0 (range)
              4 LOAD_CONST               0 (3)
              6 CALL_FUNCTION            1
              8 GET_ITER
        >>   10 FOR_ITER                20 (to 32)
             12 STORE_NAME               1 (i)
  3          14 LOAD_CONST               1 (<code object foo at 0x107544810, file "<dis>", line 3>)
             16 LOAD_CONST               2 ('foo')
             18 MAKE_FUNCTION            0
             20 STORE_NAME               2 (foo)
  5          22 LOAD_NAME                2 (foo)
             24 LOAD_NAME                1 (i)
             26 CALL_FUNCTION            1
             28 POP_TOP
             30 JUMP_ABSOLUTE           10
        >>   32 POP_BLOCK
        >>   34 LOAD_CONST               3 (None)
             36 RETURN_VALUE

正如@avigil建议的那样,最好在循环外定义函数并将循环变量作为参数传递。