鱼C论坛

 找回密码
 立即注册
查看: 2067|回复: 7

全局变量与局部变量

[复制链接]
发表于 2023-5-15 18:03:05 | 显示全部楼层 |阅读模式

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

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

x
第一个例子:
>>> def outside():
        var = 5
        def inside():
                nonlocal var
                print(var)
                var = 3
        inside()

       
>>> outside()
5

第二个例子:
>>> def outside():
        var = 5
        def inside():
                nonlocal var
                print(var)
                var = 3
                return var
        inside()

       
>>> outside()
5


【我的问题】

1、两个例子中var = 3好像都没有作用,无论是否是否有无return var,运行的结果都是一样的,都是返回5


2、如果希望返回的值是3,应如何修改代码呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-15 18:03:36 | 显示全部楼层
1、这是因为在第一个例子中,虽然在inside函数中将var的值修改为3,但是并没有返回这个值,所以outside函数中的var仍然是原来的值5;在第二个例子中,虽然在inside函数中将var的值修改为3并返回这个值,但是outside函数并没有接收这个返回值,所以仍然输出原来的值5。

2、如果希望返回的值是3,需要在outside函数中接收inside函数的返回值,并将其作为outside函数的返回值。修改代码如下:
def outside():    var = 5    def inside():        nonlocal var        print(var)        var = 3        return var    return inside()print(outside())  # 输出3

在这个修改后的代码中,我们将inside函数的返回值作为outside函数的返回值,这样就可以输出3了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-15 18:09:10 | 显示全部楼层
因为在print()以前修改的var呀,你第二次运行outside就不一样了
另外第二个只有inner输出并返回,可是在outside里没用啊,outside最后改成
return inside()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-15 18:10:49 | 显示全部楼层
对于第一个例子,虽然在inside函数内部将nonlocal var赋值为3,但是由于没有return var导致函数最终返回的结果还是外部函数中的var,即5。

对于第二个例子,虽然在inside函数内部将nonlocal var赋值为3,但是这里的return var并没有被外部函数outside捕获,因此最终函数返回了None。

如果想要让函数返回3,可以使用return语句将inside函数内部的var返回给outside函数。修改代码如下:
def outside():
    var = 5
    def inside():
        nonlocal var
        print(var)
        var = 3
        return var
    return inside()

print(outside()) # 输出:3

这样,在调用outside函数时,会先执行inside函数,将inside函数内部的var赋值为3,并将其返回给outside函数。在返回结果3之前,也会打印出inside函数内部的var的值,即输出3。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-15 18:25:30 | 显示全部楼层
isdkz 发表于 2023-5-15 18:03
1、这是因为在第一个例子中,虽然在inside函数中将var的值修改为3,但是并没有返回这个值,所以outside函数 ...

我测试了一下,顺便纠正一下大神:

>>> def outside():
        var = 5
        def inside():
                nonlocal var
                print(var)
                var = 3
                return var
        return inside()

>>> outside()
5
3
>>> print(outside())
5
3

无论是 outside(),还是print(outside()),都是返回:
5
3
而不是单单输出一个3哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-15 19:22:26 | 显示全部楼层
lzb1001 发表于 2023-5-15 18:25
我测试了一下,顺便纠正一下大神:

>>> def outside():

5是在函数里输出的。而3是返回值,在函数外输出
他确实讲错了,不过两者有区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-15 20:21:46 | 显示全部楼层
认真学习全局变量和局部变量,之前看完没弄明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-15 22:25:37 | 显示全部楼层
搞清概念
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 02:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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