【发布时间】:2017-11-12 23:42:15
【问题描述】:
示例 1:
x =[]
def func():
print('x value is:', x)
x.append('member1')
print('x value is now:', x)
func()
print('x value is', x)
运行后,结果会
('x value is:', [])
('x value is now:', ['member1'])
('x value is', ['member1'])
例子2:
y = 50
def func():
#global y
print('y value is:', y)
y = 2
print('global y is change to:', y)
func()
print('y value is', y)
运行后:
UnboundLocalError: local variable 'y' referenced before assignment
解决方案是取消注释行 global x
但是为什么 python 以不同的方式处理列表和插入呢?
为什么列表 x 不需要全局?
为什么 python 不响应例如 1 这样的列表:
local variable 'x' referenced before assignment
谢谢!
【问题讨论】:
-
Python 并没有区别对待它们,你是。
x.append(...)修改 列表。y = ...更改 变量 的值。如果您尝试x = [](在函数内部),您将得到完全相同的错误。 -
整数和列表也根本不同;前者是不可变的,后者是可变的。
-
to: Rawing:你的回答可能有道理,但是
x.append(...)或x=是什么,我认为它们是一样的吗?他们都在改变/修改 x ?当x.append(...),为什么python不说local variable 'x' referenced before assignment -
@Niuya:Python 使用的名称与人相似。我可以告诉某人打牛牙,你会被打。如果我说我现在叫我大哥牛牙,那不改变你是谁,只是改变牛牙指的是谁,现在打牛牙就是打我哥。 .append 是打耳光。它会更改名称所指的任何对象。使用 x =,但是只是将名称赋予其他东西而不更改任何对象。
-
@Niuya 你可以把一个变量想象成一个杯子。杯子的内容是变量的值。
x.append(...)就像将茶包浸入杯中 - 它将杯中的水变成茶。但是x = ...就像把杯子里的水倒掉,换成咖啡。它们是完全不同的两件事。
标签: python