我认为list.extend列表中的"+ ="基本上做同样的事情 - 扩展列表而不创建新列表.
我希望下面的代码可以打印,[42, 43, 44, 45, 46]但我得到了UnboundLocalError: local variable 'x' referenced before assignment
为什么我收到此错误?区别在哪里?
def f():
x.extend([43, 44])
def g():
x += ([45, 46])
x = [42]
f()
g()
print x
Run Code Online (Sandbox Code Playgroud)
我在python2.7.3和python3.4.0中尝试过这个.
+=使对象有机会就地改变对象.但这取决于类型x,不是给定对象被改变的地方.
因此,+= 仍需要重新分配到x; 要么x.__iadd__()返回x,要么返回一个新对象; x += something真的被翻译成:
x = x.__iadd__(something)
Run Code Online (Sandbox Code Playgroud)
因为+=包含一个赋值,x被标记为本地g().
x.extend()另一方面,不是任务.程序员已经决定使用方法x始终是一个对象.extend()并直接使用它.Python看不到任何赋值,x并被标记为全局.
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |