Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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
C结构到Python类还是dict?_Python_Dictionary - Fatal编程技术网

C结构到Python类还是dict?

C结构到Python类还是dict?,python,dictionary,Python,Dictionary,我听说并读到,使用C语言定义的类结构(见下面的C代码)定义大量信息很容易 我想使用Python以类似的方式定义。我在代码方面不需要什么帮助,我是Python的新手组 关于哪种方式更容易定义,有什么建议吗?用dict可以,但class最好 下面的C代码示例(我还有其他类似的结构和信息): typedef结构 { U16-ID; S8名称[32]; S8说明[96]; S8单位[16]; 枚举类型; F32标度; F32偏移量; 布尔可写; }斯丹福; /*ID、名称、描述、单位、类型、缩放、偏移、

我听说并读到,使用C语言定义的类结构(见下面的C代码)定义大量信息很容易

我想使用Python以类似的方式定义。我在代码方面不需要什么帮助,我是Python的新手组

关于哪种方式更容易定义,有什么建议吗?用
dict
可以,但
class
最好

下面的C代码示例(我还有其他类似的结构和信息):

typedef结构
{
U16-ID;
S8名称[32];
S8说明[96];
S8单位[16];
枚举类型;
F32标度;
F32偏移量;
布尔可写;
}斯丹福;
/*ID、名称、描述、单位、类型、缩放、偏移、可写*/
SDatanfo数据项[]=
{
0x0202,“故障诊断码数量”,故障诊断码数量“,u8,1,0,FALSE,
0x2007,“FlBodyVertLocSel\u A\u测量”,“FL垂直加速度”,“m/s^2”,s16,0.05,0,假,
0x2008,“FrBodyVertLocSel\u A\u Meas\u”,“FR垂直加速度”,“m/s^2”,s16,0.05,0,假,
0x2022,“RlBodyVertLocSel\u A\u测量”,“RL垂直加速度”,“m/s^2”,s16,0.05,0,假
}
重要的是要知道上面的每一条代码都可以在Python中更改。在任何在线连锁店中,上述问题均未得到回答


还有一些例子。

正如我在评论中所说,我不确定你到底想要什么……但这里有一个猜测:

from pprint import pprint
import sys

def sprintf(format, *args):
    return format % args

def _attributes_from_dict(d):
    self = d.pop('self')
    for n, v in d.items():
        setattr(self, n, v)

class DataInfo(object):
    fieldnames = 'id, name, description, units, type, scaling, offset, writeable'.split(', ')

    def __init__(self, id, name, description, units, type, scaling, offset, writeable):
        _attributes_from_dict(locals())

    def __repr__(self):  # optional
        values = tuple(getattr(self, fieldname) for fieldname in self.fieldnames)
        id = values[0]
        remainder = ', '.join(map(repr, values[1:]))
        return sprintf('%s(0x%04x, %s)', self.__class__.__name__, id, remainder)

u8, s16 = 0, 1  # enum eType names and values

data_items = [
    DataInfo(*args) for args in [
        (0x0202, "dtc_num_of_faults_",       "Number of DTCs",           "",      u8,  1,    0, False),
        (0x2007, "FlBodyVertLocSel_A_Meas_", "FL Vertical Acceleration", "m/s^2", s16, 0.05, 0, False),
        (0x2008, "FrBodyVertLocSel_A_Meas_", "FR Vertical Acceleration", "m/s^2", s16, 0.05, 0, False),
        (0x2022, "RlBodyVertLocSel_A_Meas_", "RL Vertical Acceleration", "m/s^2", s16, 0.05, 0, False),
    ]
]

pprint(data_items)
输出:

[数据信息(0x0202,“故障诊断码数量”、“故障诊断码数量”、“0、1、0、错误”),
数据信息(0x2007,'FlBodyVertLocSel_A_Meas_'FL垂直加速度,'m/s^2',1,0.05,0,False),
数据信息(0x2008,'FrBodyVertLocSel_A_Meas_'FR垂直加速度,'m/s^2',1,0.05,0,False),
数据信息(0x2022,'RlBodyVertLocSel_A_测量','RL垂直加速度','m/s^2',1,0.05,0,假)]

@martineau,谢谢你的更正。你能回答我的问题吗?巴拉特:不客气。我没有发布答案的一个原因是,我不清楚你到底想要实现什么(以及为什么)。Python与C不同,因为它没有类似于
struct
的数据类型,或者不能以如此简洁的方式声明它们的数组。它也是动态类型化的,因此其中的变量/属性没有一种类型的值永久绑定到它们,就像在C中一样——它们的类型是由当前恰好分配给它们的值定义的。请回答您的问题,并解释您计划如何使用定义的类(或dict)。