persistent var1 ... varN
说明
persistent 将变量var1.....varN 声明为持久变量。
持久变量是声明它们的函数的局部变量;但其值保留在对该函数的各次调用所使用的内存中,Matlab命令行和其它函数中的代码不能更改持久变量。
当 MATLAB 首次遇到特定 persistent
语句时,它将持久变量初始化为空矩阵 ([]
)。
在您清除或修改内存中的函数时,MATLAB 会清除持久变量。
在当前工作文件夹中创建函数 myFun
。
每次调用函数时,n
的值都会增加。
function myFun()
persistent n
if isempty(n)
n = 0;
end
n = n+1
end
在命令提示符下,调用 myFun 三次。
myFun
myFun
myFun
输出
n =
1
n =
2
n =
3
清除 myFun
并再调用它两次。
清除该函数会同时清除持久变量。
clear myFun
myFun
myFun
输出
n =
1
n =
2
-
持久变量与全局变量类似,因为 MATLAB 为二者都建立持久存储。
二者的区别在于持久变量仅为声明它们的函数所知晓。
因此,MATLAB 命令行或其他函数中的代码不能更改持久变量。
-
由于 MATLAB 将持久变量初始化为一个空矩阵 (
[]
),通常函数会检查持久变量是否为空,如果是,则初始化该持久变量。
1.persistent :相当于c++中的Static,定义静态变量。
而static是关键字,就是静态局部变量,即使在声明时未付初值,编译器也会把它初始化为0,且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
静态局部变量的效果跟全局变量有一拼,但是位于函数体内部,就极有利于程序的模块化了。
2.把在函数中声明的局部变量保存到内存中,供以后调用该函数使用。
定义的变量类似全局变量会一直存在内存中,但不同的是persistent变量只能被所被定义的函数使用,这样能够防止被其他函数或其他命令所改变。
persistent变量只有在m文件被改变或被从内存中清除,该变量才会被清除。
persistent变量初始化为一个空矩阵。
import pickle
a = [[1,2],[2,3,4,5]] #单变量的储存
f = open('store.pkl', 'wb')
pickle.dump(a, f)
f.close()
#多变量保存
a = [[5,6,7],[7,8]]
b = ['a','b',"c"]
c = "哈萨克斯"
d = "shsjka" #多变量的储存
f = open('store.pkl', 'wb')
pickle.dump([a,b,c,d], f) #把a,b,c,d存储到文件中,wb表示写入
f.close()
#加载
import pickle
f = open('store.pkl', 'rb')
storedata= pickle.load(f)
print(storedata)
f.close() #关闭文件
'''输出
[[[5, 6, 7], [7, 8]], ['a', 'b', 'c'], '哈萨克斯', 'shsjka']
'''
Python的局部静态变量
哈哈,看了这么久的博客,python居然没有局部静态变量,这就很难受了。
找到几种方式看是否可行。
def func():
func.m+=1
print(func.m)
func.m=0
func()
func()
1
2
默认参数
def func(x=[0]):
x[0]+=1
print(x[0])
func()
func()
1
2
Python解释器在执行def语句时,会给函数的默认参数创建一个对象实例,当该参数是一个可变对象时,可以用于记录函数的状态,类似于局部静态变量的功能。
首先了解几个概念:
全局变量:在模块内,在所有函数外面,在class外面。
局部变量:在函数内,在class的方法内。
静态变量:在class内的,但不在class的方法内
a = 1
b = [2, 3]
def func():
a = 2
print ("in func a:", a)
b[0] = 1
b.append(6) #b的第一个元素改为1,在最后一列增加6
print ("in func b:", b)
if __name__ == '__main__':
print( "before func a:", a)
print ("before func b:", b)
func()
print ("after func a:", a)
print ("after func b:", b)
before func a: 1
before func b: [2, 3]
in func a: 2
in func b: [1, 3, 6]
after func a: 1
after func b: [1, 3, 6]
全局变量的修改,加入global声明:
a = 1
b = [2, 3]
def func():
global a
a = 2 #声明全局变量
print ("in func a:", a)
b[0] = 1
print ("in func b:", b)
if __name__ == '__main__':
print ("before func a:", a)
print ("before func b:", b)
func()
print ("after func a:", a)
print ("after func b:", b)
before func a: 1
before func b: [2, 3]
in func a: 2
in func b: [1, 3]
after func a: 2
after func b: [1, 3]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)