python如何在数组中有不同的数据类型?

时间:2012-05-11 21:09:13

标签: python c arrays

Python可以有一个包含不同数据类型的列表,即[1,“two”,3]。 Python是用c实现的,那么如何使用c创建一个包含不同数据类型的数组呢?

4 个答案:

答案 0 :(得分:4)

所以,我不知道它是如何在Python中实现的,但是在C中有一些方法可以对通用数据进行操作。以最简单的形式:

void *array[size];

现在你有一个满是void*的数组。每个void*都可以指向任何内容。您还需要一些额外的信息来告诉您它指向的东西的大小。

typedef struct {
    void *data;
    size_t size;
} elem;

如果需要,您可以通过各种方法表示实际类型。您可以使用联合在同一变量中保存N种类型之一。无论如何,关键在于有多种方法可以对C中的通用数据进行操作。

答案 1 :(得分:3)

如果您的数组由以下形式的C结构组成:

struct slot {
  int type;
  char *data;
};

现在你有一个可以包含任意类型数据的数组,只要你可以将它们表示为指向char的指针。

当然,这不是Python如何做到的;关键是应用程序处理数据的方式与实现语言处理数据的方式之间不必有任何联系。

答案 2 :(得分:3)

  

如何使用c?

创建一个包含不同数据类型的数组

你不能; C是一种静态类型的语言。

但是,你可以使用像工会这样的东西:

typedef union {
    int i;
    float f;
} Foo;


Foo array[3];

array[0].i = 3;
array[1].f = 4.2;
...

您也可以使用void *指向您喜欢的任何对象,但这需要仔细的内存管理。

答案 3 :(得分:0)

在Python中,没有“原始”值;一切都是对象,知道它的类型。甚至整数都是对象(尝试打印(1).__class__1 .__class__)。使用Python对象在C中执行的所有操作都是通过PyObject *(指向对象的指针)完成的.¹

Python listPyObject *的动态(即可调整大小)数组。由于每个对象都知道它的类型,因此list不必声明为具有特定类型的成员。

¹另请注意:Python没有通常意义上的“变量”(C,BASIC,Pascal等),其中类型变量包含值;它有名称空间和名称(实际上,字典将字符串映射到对象;名称空间是字典,其键是名称,其值是指向每个名称所指向的对象的指针)。