这两个代码有什么区别吗?

时间:2021-04-01 22:09:17

标签: python for-loop variables syntax

for 循环使用哪种方式更好?

我应该在 for 循环中使用变量之前定义它还是不定义也可以使用它?

test_list = get_list()

for value in test_list:
  pass

for value in get_list():
  pass

2 个答案:

答案 0 :(得分:0)

它们将是等效的。 Python 不会在每次迭代中调用 get_list(),只会在第一次调用。

答案 1 :(得分:0)

要比较代码并了解它是如何字节编译的,您可以使用 dis 模块。

import dis

code1 = """
test_list = get_list()

for value in test_list:
  pass
"""

code2 = """
for value in get_list():
  pass
"""

print("code1:")
dis.dis(code1)

print("code2:")
dis.dis(code2)

你得到:

code1:
  2           0 LOAD_NAME                0 (get_list)
              2 CALL_FUNCTION            0
              4 STORE_NAME               1 (test_list)

  4           6 SETUP_LOOP              12 (to 20)
              8 LOAD_NAME                1 (test_list)
             10 GET_ITER
        >>   12 FOR_ITER                 4 (to 18)
             14 STORE_NAME               2 (value)

  5          16 JUMP_ABSOLUTE           12
        >>   18 POP_BLOCK
        >>   20 LOAD_CONST               0 (None)
             22 RETURN_VALUE

code2:
  2           0 SETUP_LOOP              14 (to 16)
              2 LOAD_NAME                0 (get_list)
              4 CALL_FUNCTION            0
              6 GET_ITER
        >>    8 FOR_ITER                 4 (to 14)
             10 STORE_NAME               1 (value)

  3          12 JUMP_ABSOLUTE            8
        >>   14 POP_BLOCK
        >>   16 LOAD_CONST               0 (None)
             18 RETURN_VALUE
相关问题