for 循环使用哪种方式更好?
我应该在 for 循环中使用变量之前定义它还是不定义也可以使用它?
test_list = get_list()
for value in test_list:
pass
或
for value in get_list():
pass
答案 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