【问题标题】:Types inside a function in Python. Why some gets updated but not others? [duplicate]Python 函数中的类型。为什么有些会更新,而有些则不会? [复制]
【发布时间】:2018-02-20 03:46:51
【问题描述】:

为什么会连续多次调用下面的函数:

a = []

def test(a,b):
    if b > 0:
        a.append(1)
        return a

使用test(a,4),每次放大列表a,但连续调用多次函数:

a = 0

def test(a,b):
    if b > 0:
        a += 1
        return a

with test(a,4) 每次返回 1 而不是 1、2、3 等?

看起来列表被一个函数更新并且即使在函数完成执行后仍保留其更新值,而这种行为不适用于整数(我猜是浮点数和其他几种类型)。

【问题讨论】:

  • 因为在一种情况下,您正在显式更新一个可变列表对象,而在另一种情况下,您正在创建新的不可变整数对象。
  • 查看这个答案here 以获得对这种行为的一个很好的解释。

标签: python function


【解决方案1】:

整数是不可变的;列表是可变的。 a += 1 通过重新分配它所引用的值来更改 a 的值。 a.append(1) 将值 1 添加到 a 引用的列表中,而不更改引用本身。

在您的 test 函数中,a 如果函数范围内的引用;与全局范围内的a 引用不同。但是,当传递一个可变对象时,引用保持不变;允许修改对象而无需重新分配变量。在你的函数中

def test(a, b):
    if b > 0:
        a += 1
        return a

a 的值相对于test 进行了修改。要全局重新分配值,您需要在全局范围内执行该操作(或使用 global 关键字)。因此,不要使用test(a, 4),而是使用a = test(a, 4) 重新分配a 的值。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2011-05-12
    • 2022-01-19
    • 2015-03-30
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多