首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python常见问题:全局变量和局部变量

我在Python教学的过程中发现:几乎所有的编程学习者在开始用函数不久之后,都踩过局部变量的坑。几乎每个星期,都会有人在答疑群问到关于作用域使用不当而导致的问题。(前两天我在知识星球里刚回答了一个)

所以,如果你对“全局变量”、“局部变量”、“形参”、“实参”、“变量作用域”这几个概念还不是理解得非常清楚,可以读一读今天这篇文章。

这些内容,在我们的教程里都有,包含在了:

这里再帮大家理一下。

首先来看这样一段代码:

def func(x):

   print('x =', x)

   y = 10

   x += y

   print('x =', x)

   return x

a = 5

b = func(a)

print('a =', a)

print('b =', b)

输出:

x = 5

x = 15

a = 5

b = 15

这里,函数 func 的形参是 x,它只在函数内部有效,也就是作用域仅在函数中,如果在外部调用它,就会报错。

变量 a 作为实参传递给函数 func,所以函数里 x 的值就是 a 的值,但 x 不是 a,只是现在它俩一样。

变量 y 是函数中定义的局部变量,它的作用域同样也仅在函数中。

对 x 进行赋值之后,x 的值发生了变化,但不会影响实参 a 的值。

函数的返回值是 x 的值,并赋值给了外部的变量 b,所以 b 的值就是 x 的值,但 b 不是 x,此时 x 已不存在。

理解了上面几条之后,我们再修改一下函数:

def func(x):

   print('x =', x)

   x = 10

   x += x

   print('x =', x)

   return x

x = 5

func(x)

print('x =', x)

输出:

x = 5

x = 20

x = 5

解读一下:

函数 func 的形参是 x

外部变量 x 作为实参传递给函数 func,所以函数里 x 的值就是外部 x 的值,但这两个 x 是两个不同的变量,只是现在值一样。

变量 x 在函数中被重新赋值 10,但不会影响外部变量 x 的值。

对 x 自身做了累加,此时 x 变成 20。

函数的返回值是 x 的值,但没有赋值给任何变量,所以此返回值没任何作用,函数结束。

外部的变量 x 仍然是一开始的值 5。

但在初学阶段,不建议你这么给变量命名,可能会把自己绕进去。把代码写清楚,多定义几个变量,多分几行代码,反正也不要钱。

那如果要在函数内部修改外部的变量可不可以呢?

可以,用全局变量。

def func():

   global x

   x = 10

x = 5

func()

print('x =', x)

输出:

x = 10

在函数中声明 global x,程序就会知道这个 x 是一个全局变量。此时的 x 就是外部的 x,给它赋值的结果自然在函数结束后依然有效。

但这种情况下,你不能再同时将 x 设定为函数的形参。

如果你仅仅需要在函数内部读取外部的参数值而不用修改它的值,那么 global 的声明就不再需要。

def func():

   y = x

   print('y =', y)

x = 5

func()

print('x =', x)

输出:

y = 5

x = 5

写入时 global 的必要在于区分全局变量和局部变量,而读取不存在这样的问题。

以上就是关于全局变量、局部变量、形参、实参、变量作用域的一些小知识点,更多内容可以查看我们的入门系列教程。

最后留一个思考题:

def func(m):

   m[0] = 20

   m = [4, 5, 6]

   return m

l = [1, 2, 3]

func(l)

print('l =', l)

思考一下输出会是什么?

然后自己在电脑上或者在线编辑器里输入代码运行下看看结果,再想想为什么。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OD2NZL7h9729tNcNzGBH6gxQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券