Comprensión de variables persistentes (persistentes) en Matlab en Python

gramática

persistent var1 ... varN

ilustrar

persistente Declara las variables var1.....varN como persistentes . Las variables persistentes son locales para la función en la que se declaran; sin embargo, su valor permanece en la memoria utilizada por cada llamada a esa función, y el código en la línea de comandos de Matlab y en otras funciones no puede cambiar las variables persistentes. Cuando MATLAB encuentra por primera vez una persistentdeclaración en particular, inicializa la variable persistente en una matriz vacía ( []). MATLAB borra las variables persistentes cuando borra o modifica funciones en la memoria.

ejemplo

recuento de llamadas de función

Cree la función en la carpeta de trabajo actual myFun. nEl valor de se incrementa cada vez que se llama a la funció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

Borrar myFuny llamarlo dos veces más. Borrar esta función también borra las variables persistentes.

clear myFun
myFun
myFun



输出

n =

     1


n =

     2
  • Las variables persistentes son similares a las variables globales en que MATLAB establece un almacenamiento persistente para ambas. La diferencia entre los dos es que las variables persistentes sólo las conoce la función que las declara . Por lo tanto, el código en la línea de comandos de MATLAB o en otras funciones no puede cambiar las variables persistentes.

  • Dado que MATLAB inicializa una variable persistente en una matriz vacía ( []) , normalmente la función verifica si la variable persistente está vacía y, de ser así, inicializa la variable persistente.

global y persistente

1.persistente: Equivalente a Static en c++, definiendo variables estáticas. Y static es una palabra clave, que es una variable local estática. Incluso si el valor inicial no se paga en el momento de la declaración, el compilador lo inicializará a 0 , y la variable local estática se almacena en el área de datos globales de el proceso Incluso si la función regresa, su valor también permanecerá sin cambios . Las variables locales estáticas tienen el mismo efecto que las variables globales, pero están ubicadas dentro del cuerpo de la función, lo que favorece mucho la modularización del programa .

2. Guarde las variables locales declaradas en la función en la memoria para luego llamar a la función . Las variables definidas son similares a las variables globales y siempre existirán en la memoria, pero la diferencia es que las variables persistentes solo pueden ser utilizadas por la función definida , lo que puede evitar que otras funciones u otros comandos las cambien.

La variable persistente solo se borra cuando el archivo m se cambia o se borra de la memoria .

La variable persistente se inicializa en una matriz vacía .

Persistencia variable en python

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']
'''

Variables estáticas locales de Python

Jaja, después de leer tanto el blog, es muy incómodo que python no tenga variables estáticas locales. Encuentre algunas maneras de ver si funciona.

definir las propiedades de la función

def func():
    func.m+=1
    print(func.m)
func.m=0
func()
func()
1
2

parámetros predeterminados


def func(x=[0]):
    x[0]+=1
    print(x[0])
func()
func()
1
2

Cuando el intérprete de Python ejecuta la declaración def, creará una instancia de objeto para el parámetro predeterminado de la función. Cuando el parámetro es un objeto mutable, se puede usar para registrar el estado de la función, similar a la función de un local variable estática.

método estático

Primero entienda algunos conceptos:

Variables globales: en el módulo, fuera de todas las funciones, fuera de la clase.

Variables locales: dentro de la función, dentro del método de la clase.

Variables estáticas: en la clase, pero no en el método de la clase

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]

Para modificar la variable global, agregue la instrucción 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]

Supongo que te gusta

Origin blog.csdn.net/weixin_48266700/article/details/123912805
Recomendado
Clasificación