我们想实现每次都能保存变量时可以使用global 关键字
a = 1
def paobua(b):
global a # global 声明a是全局变量,而不是局部变量
naw = a + b # 每次调用全局变量a来和b相加
a = naw # 重新定义全局变量a的值
return a
print(paobua(2)) # 打印3
print(paobua(3)) # 打印6
print(paobua(6)) # 打印12
另外还可以使用闭包的方式,下面是一个简单的示例:
闭包的优势在于记忆住上一次调用的状态,而使用全局是一种糟糕的行为,并且全局变量有可能会被其他函数或代码改变。而闭包就不会出现这种问题。
闭包 = 函数+环境变量(环境变量就是下面的cs,而css属于本地局部变量)
shu = 0
def chn(cs):
def usa(css):
nonlocal cs # 声明cs不是本地局部变量
naw = cs + css # 将cs与css相加(css来源于下面的s(数值))
cs = naw # 将cs重新赋值并保存
return cs
# 返回数值cs
return usa
# 返回函数usa实现闭包
s = chn(shu) # 实例化chn函数并将shu变量作为实参传递到chn当中
print(s(2)) # 打印2
print(s(3)) # 打印5
print(s(6)) # 打印11
print(s.__closure__[0].cell_contents) # 获取闭包内部的变量
需要注意的是环境变量因为要常驻内存会造成内存泄露(内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。)