Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象层次结构从MATLAB转换为python_Python_Matlab_Coding Style - Fatal编程技术网

将对象层次结构从MATLAB转换为python

将对象层次结构从MATLAB转换为python,python,matlab,coding-style,Python,Matlab,Coding Style,我正在将一个MATLAB脚本转换成python。MATLAB脚本对不同的输入变量使用某种对象层次结构,如下所示: parameterA.subparameter1= A1; parameterA.subparameter2= A2; parameterB.subparameter1= B1; parameterB.subparameter2= B2; 其中A1、A2、B1、B2都可以是字符串和数字。我希望将其转换为python,我已经使用了 parameterA.subparameter1=

我正在将一个MATLAB脚本转换成python。MATLAB脚本对不同的输入变量使用某种对象层次结构,如下所示:

parameterA.subparameter1= A1;
parameterA.subparameter2= A2;

parameterB.subparameter1= B1;
parameterB.subparameter2= B2;
其中
A1、A2、B1、B2都可以是字符串和数字。我希望将其转换为python,我已经使用了

parameterA.subparameter1= A1
parameterA.subparameter2= A2

parameterB.subparameter1= B1
parameterB.subparameter2= B2
现在我得到了一个错误:

NameError:未定义名称“parameterA”

我试图通过使用
parameterA,parameterB=[],[]
来初始化它们,这不好,因为我想要的是对象而不是列表,或者
parameterA,parameterB=set(),set()
,以及其他一些解决方案


这是正确的方法吗?如何初始化此结构?有更好的方法吗?

我强烈建议您改用
dict
s。这些是python中高效且通用的内置对象

parameterA  = {'subparameter1': A1} # definition
parameterA['subparameter2'] = A2 # update/assignment

parameterB = {'subparameter1': B1, 'subparameter2': B2}
如您所见,您可以使用方括号访问和修改值。如果您确实坚持使用属性查找,则可以使用
类型。SimpleNamespace

from types import SimpleNamespace

parameterA = SimpleNamespace(subparameter1=A1)
parameterA.subparameter2 = A2

parameterB = SimpleNamespace(subparameter1=B1, subparameter2=B2)
我坚持使用dicts的主要原因是您可以轻松地动态访问密钥。如果从不以编程方式访问属性,则仅使用
SimpleNamespace
或类似的工具,因为对象更像是将变量分组在一起的工具。您仍然可以通过编程方式访问属性,但它比
dict
项查找更难看(也不那么惯用)。

对于Python Engine for MATLAB,您可以在中找到将MATLAB中的类与Python中的类进行消歧的方法

class parameterA: pass
class parameterB: pass

parameterA.subparameter1= A1
parameterA.subparameter2= A2

parameterB.subparameter1= B1
parameterB.subparameter2= B2
如果您想适应文档,您应该用Python中的字典(比如)替换MATLAB中的结构。如果希望保留使用点运算符调用结构字段的语法,还可以在Python中定义类

class parameterA: pass
class parameterB: pass

parameterA.subparameter1= A1
parameterA.subparameter2= A2

parameterB.subparameter1= B1
parameterB.subparameter2= B2

。。。但我也会推荐字典