python答案为啥是323

def func():
x=2
print(x)
x=3
print(x)
func()
print(x)

全局变量和局部变量的区别,前面的已经讲得很详细了,不过你把函数里的x=2注释掉,就会显示333了。
因为如果局部作用域(函数)里没有给变量赋值的话,同名变量引用的是全局变量。
如果想在局部作用域里改变全局变量,可以在函数里使用关键字global。如下面就是输出322.

def func():
    global x
    x=2
    print(x)

x=3
print(x)
func()
print(x)

img

这里面主要是5小段,一个是函数 func(),剩下四个是图中标出来的

代码执行的第1句是 x=3
代码执行的第2句是 print(x),此时输出 3
代码执行的第3句是 func(),进入到函数中,该函数中有一个局部变量 x = 2,此时输出 2,这个变量只在函数中是有效的
代码执行的第4句是 print(x),这里的 x 是第 1 行的 x, 而不是函数中的 x,因此此时依旧输出 3

因为函数里面的x是局部变量,只影响函数里面的x的值。虽然外面的x和里面的x长得一样,但是两个变量的地址和值都不一样。尽管函数里面的x定义为了2,但是只有在使用函数的时候这个x才是2。
所以第一个print x输出的是全局变量x,就是x=3的这个x
第二个调用了函数,函数输出的是局部变量x,就是x=2的这个x
第三个print x输出的还是全局变量的x,尽管前面调用了函数而且函数里面有x=2,这里面的x还是x=3的x,这个还是输出全局变量x