将对象层次结构从MATLAB转换为python
我正在将一个MATLAB脚本转换成python。MATLAB脚本对不同的输入变量使用某种对象层次结构,如下所示:将对象层次结构从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=
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
。。。但我也会推荐字典