鱼C论坛

 找回密码
 立即注册
查看: 1766|回复: 3

[技术交流] Python FAQ 012 全局变量为什么能在函数中改变

[复制链接]
发表于 2020-3-4 12:34:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Python FAQ 012 全局变量为什么能在函数中改变


问题

不是说不能在函数中改变全局变量吗,为什么下面这段代码可以在函数中改变 result 的值,而且没有 global result ?
result = []


def get_digit(n):
    if n > 0:
        result.insert(0, n % 10)
        get_digit(n // 10)


get_digit(12345)
print(result)

答案

虽然不能直接在函数中使用赋值运算符 = 、+= 等等改变全局变量的值,但是可以通过全局变量的方法改变全局变量的值。

在上面的代码中,只是调用 result 的 insert() 方法改变 result 的值,并没有使用赋值运算符。

所以这样也是可以的。

相反,如果是下面这段代码运行时就会报错了:
result = []


def get_digit(n):
    if n > 0:
        result = [n % 10] + result    # 报错位置,原因是这里使用了 = 赋值运算符改变了 result 的值
        get_digit(n // 10)


get_digit(12345)
print(result)

这时就该用 global result 告诉 Python 你想用赋值运算符改变 result 的值了:
result = []


def get_digit(n):
    global result
    if n > 0:
        result = [n % 10] + result
        get_digit(n // 10)


get_digit(12345)
print(result)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-4 13:02:22 From FishC Mobile | 显示全部楼层
最终一定要把所有的faq.以索引的形式归拢到一个帖子里

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3 感谢建议

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-4 13:03:25 | 显示全部楼层
wp231957 发表于 2020-3-4 13:02
最终一定要把所有的faq.以索引的形式归拢到一个帖子里

嗯嗯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 15:35:24 | 显示全部楼层
这就是可变对象和不变对象的区别……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 08:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表