Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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++ 什么是Ada记录/C++;结构类型?_C++_Python_Record_Ada - Fatal编程技术网

C++ 什么是Ada记录/C++;结构类型?

C++ 什么是Ada记录/C++;结构类型?,c++,python,record,ada,C++,Python,Record,Ada,假设我正在记录数据,并且希望关联一些数据元素,这样每个记录集总是有一个固定的组合,即没有缺少的字段 作为程序员,我的大部分经验都与Ada或C/C++变体有关。在Ada中,我将使用记录类型和聚合赋值,这样当记录类型更新为新字段时,编译器将通知使用该记录的任何人。在C++中,我可能会使用存储类和构造函数来做类似的事情。p> 在Python中处理类似情况的适当方法是什么?在这种情况下,类是正确的答案,还是有一个更轻的模拟Ada记录 另一种思想,艾达记录和C++构造函数都允许默认初始化值。对于上述问题,

假设我正在记录数据,并且希望关联一些数据元素,这样每个记录集总是有一个固定的组合,即没有缺少的字段

作为程序员,我的大部分经验都与Ada或C/C++变体有关。在Ada中,我将使用记录类型和聚合赋值,这样当记录类型更新为新字段时,编译器将通知使用该记录的任何人。在C++中,我可能会使用存储类和构造函数来做类似的事情。p> 在Python中处理类似情况的适当方法是什么?在这种情况下,类是正确的答案,还是有一个更轻的模拟Ada记录


另一种思想,艾达记录和C++构造函数都允许默认初始化值。对于上述问题,是否有Python解决方案也提供了该功能

在Python中,字典是实现这一点的经典方法。但它不能强制要求值必须存在,并且不执行初始值

config = {'maxusers': 20, 'port': 2345, 'quota': 20480000}
是Python版本中支持它的另一个选项。

A(来自集合库)可能适合您的目的。它基本上是一个元组,允许按名称和索引位置引用字段。所以它是有序命名字段的固定结构。它还很轻量级,因为它使用
插槽
来定义字段名,因此无需在每个实例中都携带字典

典型的用例是定义一个点:

from collections import namedtuple
Point = namedtuple("Point", "x y")
p1 = Point(x=11, y=22)
它的主要缺点是,作为一个元组,它是不可变的。但是有一种方法,
replace
,它允许您用新值替换一个或多个字段,但在这个过程中会创建一个新实例


ActiveState Python Recipes 576555中还有一个名为namedtuple的可变版本,它允许直接更改字段。我使用过它,并且可以保证它工作得很好。

好吧,Python太过动态,无法让您在所有对象上强制执行结构,从而无法添加或删除字段,但我最近在Python方面犯了很多错误。@zneak:您可以使用它强制执行不能在对象上创建任意属性,但这应该避免。@zneak:这是我开始使用该语言时的假设,但到目前为止,我发现它足够灵活,可以提供大量的结构。讽刺的是,看看这里:对应的,而不是必然的。推论是前一个陈述的后续陈述,一旦你证明了一个定理,你就会发现它是正确的。我以前用过类似的字典,不过通常是成对的值。它还有限制重复键的额外好处。+1:类是一个dict加上一堆你不需要的东西。另一种获得默认值的方法是在设置值之前复制一个原型dict。