2 ms·
def bar(): x += [3] # UnboundLocalError This is an especially funky one. x.extend([3]) would be allowed. Presumably x += [3] is not because it expand
by zephyrfalcon 7y ago
def bar():
x += [3] # UnboundLocalError
This is an especially funky one. x.extend([3]) would be allowed. Presumably x += [3] is not because it expands to x = x + [3]... However, the += operator on lists works the same as extend(), i.e. it changes the list in-place.
- ben509 7y agodis.dis(bar) shows: 0 LOAD_FAST 0 (x) 2 LOAD_CONST 1 (3) 4 INPLACE_ADD 6 STORE_FAST 0 (x) 8 LOAD_CONST 0 (None) 10 RETURN_VALUE So INPLACE_ADD and STORE_FAST are essentially doing x = x.__iadd__([3])