代码之家  ›  专栏  ›  技术社区  ›  havakok

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

  •  1
  • havakok  · 技术社区  · 7 年前

    我正在将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
    

    现在我得到了错误:

    名称错误:未定义名称“parametera”

    我试图通过使用 parameterA,parameterB=[],[] ,这不好,因为我需要对象而不是列表或 parameterA,parameterB=set(),set() 根据 this post 以及其他一些解决方案。

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   Andras Deak -- Слава Україні    7 年前

    我强烈建议你使用 dict 而是S。这些是Python中高效和通用的内置对象。

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

    如您所见,您可以使用方括号访问和修改值。如果你 真的? 坚持使用属性查找,可以使用 types.SimpleNamespace :

    from types import SimpleNamespace
    
    parameterA = SimpleNamespace(subparameter1=A1)
    parameterA.subparameter2 = A2
    
    parameterB = SimpleNamespace(subparameter1=B1, subparameter2=B2)
    

    我坚持听写的主要原因是您可以轻松地动态访问密钥。仅使用 SimpleNamespace 或者类似的东西,如果您从不以编程方式访问属性,因为您的对象更像是一个将变量分组在一起的工具。您仍然可以通过编程方式访问属性,但是它比 双关语 项目查找。

        2
  •  1
  •   Sven Krüger    7 年前

    documentation 对于matlab的python引擎,可以发现matlab中的类与python中的类之间的消歧。

    如果您想要适应文档,那么应该用Python中的字典替换matlab中的结构(比如 Andras Deak answered )如果您想保留用点运算符调用结构字段的语法,您还可以在Python中定义类。

    class parameterA: pass
    class parameterB: pass
    
    parameterA.subparameter1= A1
    parameterA.subparameter2= A2
    
    parameterB.subparameter1= B1
    parameterB.subparameter2= B2
    

    …但我也会推荐字典。