Python菜鸟用两个代码块解释关于全局变量和局部变量

很多初学者对于全局变量和局部变量辨识不清,我在学习的过程也遇到这个思维理解问题,这篇文章有助于你理清思维,网上虽然有很多类似的文章贴,但小白可能更懂小白哦.

#关于全局变量
a = 0
def A():
    global a  #将 A 函数内的 a 声明为全局变量
    a +=1 #如果不声明,系统⽆法判断第二个 a 是全 的还是局部的,导致程序运行报错 。
    print(a)
A() 

print(a)
#当函数内外部都有相同的变量(名)存在时,代码执行的时候会优先选择函数内部定义的变量进行调用。只有当内部变量也是用global声明时,才能调用正确。

[out]
1
1

当函数内外部都有相同的变量(名)存在时,代码执行的时候会优先选择函数内部定义的变量进行调用。只有当内部变量也是用global声明时,才能调用正确。

num = 10 

# 定义一个函数
def my_func1():
    num = 30 
    # 定义一个变量
    # 局部变量(定义在函数内部的变量就叫做局部变量)
    # 局部变量的作用域(使用范围)是在函数的内部
    # 局部变量 内存使用时调用函数执行改行代码
    print('func1的运算结果是{}'.format(num))#调用全局变量    
       # 当执行完第14行标识这函数执行完成 也就是会把变量内存释放
def my_func2():
    global num
    # 标识下函数内部的num不是一个局部变量 而是对全局变量重新赋值
    num = 20 #运算使用局部变量
    # 函数运算结果可以对全局变量的值进行修改
    print('func2的运算结果是{}'.format(num))
    
print('未进行函数计算,直接取第一行{}'.format(num))
print("------")
my_func1()
print('先运行func1计算完毕,num赋值内存清空,仍直接取第一行{}'.format(num)) 
print("------")
my_func2()
print('经过了func2运算,因为定义了全局变量,所以数值改变为{}'.format(num))
print("------")
my_func1()
print('再次运行func1计算完毕,但num取值是接着func2的函数,所以取值按func2的{}'.format(num)) 


[out]
未进行函数计算,直接取第一行10
------
func1的运算结果是30
先运行func1计算完毕,num赋值内存清空,仍直接取第一行10
------
func2的运算结果是20
经过了func2运算,因为定义了全局变量,所以数值改变为20
------
func1的运算结果是30
再次运行func1计算完毕,但num取值是接着func2的函数,所以取值按func2的20

最后总结一下本文的知识点.
== 划重点敲黑板啦 ==

关于全局变量与局部变量

  • 在函数的内部使用一个变量
  • 遵循一个规则: 先在函数内部找 找到直接使用 如果找不到到函数外部找 如果还是找不到就会报错(由内到外)
  • 函数内部对全局变量的值进行修改 global
  • 标识下函数内部的num不是一个局部变量 而是对全局变量重新赋值
  • 可以对全局变量的值进行修改
  • 小甲鱼建议不到万不得已不要使用全局变量.
  • 简洁的概括为:a) 代码可读性变差 b) 代码安全性降低
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值