【问题标题】:why python treat list and integer variable in different way? [duplicate]为什么python以不同的方式处理列表和整数变量? [复制]
【发布时间】: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


【解决方案1】:

让我们举这个例子。

y = 50
def func():
    print('y value is:', y)
func()
print('y value is', y)

工作正常。为什么?你没有修改变量的范围

当您重新分配y 时,您丢失了对全局变量的引用。

另外,当您写 print('global y is change to:', y) 时,这不是全局的,因为您只是将其设为本地

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2019-11-04
    • 2019-10-05
    相关资源
    最近更新 更多