lzb1001 发表于 2023-5-15 18:03:05

全局变量与局部变量

第一个例子:
>>> 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,应如何修改代码呢?

isdkz 发表于 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了。

Threebody1 发表于 2023-5-15 18:09:10

因为在print()以前修改的var呀,你第二次运行outside就不一样了
另外第二个只有inner输出并返回,可是在outside里没用啊,outside最后改成
return inside()

sfqxx 发表于 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。

lzb1001 发表于 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哦

歌者文明清理员 发表于 2023-5-15 19:22:26

lzb1001 发表于 2023-5-15 18:25
我测试了一下,顺便纠正一下大神:

>>> def outside():


5是在函数里输出的。而3是返回值,在函数外输出
他确实讲错了,不过两者有区别

Axiujiu 发表于 2023-5-15 20:21:46

认真学习全局变量和局部变量,之前看完没弄明白。

dearfish 发表于 2023-5-15 22:25:37

搞清概念
页: [1]
查看完整版本: 全局变量与局部变量