【问题标题】:python arguments changing in module [duplicate]python参数在模块中更改[重复]
【发布时间】:2018-08-24 07:54:29
【问题描述】:

当我执行这段代码时,主模块中的“list”参数发生了变化,但“i”。为什么?如何更改模块中的“i”参数?

def func2(list, i):
    print (list, i)
    list += [4,1]
    i += 1
    print(list, i)
    return

j = 1
l = [0,1]
func2(l, j)
print("---",l , j)

感谢@JBernardo 的提示。 真正的解决方案是将变量放在列表中。现在我可以更改两个参数,这就是我想要的。

def func2(list, i):
    print (list, i)
    list += [4,1]
    i[0] = i[0]+1
    print(list, i[0])
    return

j = [1]
l = [0,1]
func2(l, j) 
print("---",l , j[0])

【问题讨论】:

  • 你的问题到底是什么?

标签: python module


【解决方案1】:

列表是可变的。您正在更改它们的内容。数字是不可变的,所以你必须在访问外部范围之前将其设置为global

def func():
    global var1, var2
    var1 += [1,2,3]
    var2 = 5


var1 = [0, 1]
var2 = 7
func()

在这种情况下,函数不接收任何参数,因为您想更改全局状态

【讨论】:

  • 我不会将可变性与范围和命名空间联系起来。实际上,在您的示例中,您已从函数签名中删除了两个参数
  • @Pynchia 这些是我用相同的解决方案解决的两个不同的问题,而不是为每个变量做一件会让初学者感到困惑的事情
  • @JBernardo 我的理解是没有办法保留参数并增加 j ?
猜你喜欢
  • 2018-07-19
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2020-08-30
  • 2013-05-11
  • 1970-01-01
相关资源
最近更新 更多