Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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
Python到C和垃圾收集器_Python_Garbage Collection_Ctype - Fatal编程技术网

Python到C和垃圾收集器

Python到C和垃圾收集器,python,garbage-collection,ctype,Python,Garbage Collection,Ctype,Python中有以下问题(C中变量by ref或val的问题) 我的C代码: #define NON_ALLOCATED 0 #define ALLOCATED 1 #define MAX_STACK 100 typedef struct myObject { int iStatus; int iSize; double pdTab; } static myObject globaTab[MAX_STACK] myObject *AllocateATab(int iSiz

Python中有以下问题(C中变量by ref或val的问题)

我的C代码:

#define NON_ALLOCATED 0
#define ALLOCATED 1
#define MAX_STACK 100

typedef struct myObject
{
   int iStatus;
   int iSize;
   double pdTab;
}

static myObject globaTab[MAX_STACK]

myObject *AllocateATab(int iSize)
{
   myObject *pxTab = NULL;
   int i;
   int iFound = 0;
   while(i < MAX_STACK && !iFound)
   {
      if (globaTab[i].iStatus = NON_ALLOCATED)
         iFound = 1;
         break;
   }
   if (i < MAX_STACK)
   {
      pxTab = globaTab + i;
      pxTab->iStatus = ALLOCATED;
      pxTab->pdTab = (double *)calloc(iSize, sizeof(double));
   }
   return pxTab;
}

int FreeATab(myObject *pxTab)
{
    if (pxTab)
    {
        pxTab->iStatus = NON_ALLOCATED;
        if (pxTab->pdTab)
           free(pxTab->pdTab);

    }
}

myObject *Scalar(double dValue)
{
    myObject *pxTab = AllocateATab(1000)
    for (int iSize = 0; iSize < 1000; iSize++)
       pxTab->pdTab[iSize] = dValue;

    return pxTab;

}
当我使用标量函数时,myObject的状态等于已分配 然而,当我进入另一个函数时,我看到object List的状态现在是NON_ALLOCATED,因为python垃圾收集器由于Scalar(mylist[I])是一个称为

您能帮我重写这段python代码吗?这样python就不会调用列表[i]上的垃圾收集器了? 谢谢

到目前为止,我仍然不认为您发布的代码存在垃圾收集问题。但是您的Python代码还有其他重要的问题。(FWIW,C代码看起来不错,我想您已经使用C有一段时间了,但对Python来说还是相当陌生的)。最大的问题是MyClass的定义有缺陷。您还没有向我们展示创建MyClass实例的代码以及如何使用它,因此可能还有其他问题

当调用一个类方法时,它会将类实例作为第一个参数传递,通常称为
self
。此参数未在调用方法时提供的参数中指定,但必须在方法定义中指定

例如

输出

5
因此,
add()
方法是用三个参数定义的,但是当我们调用它时,我们只显式地提供两个参数,因为第一个参数,
self
,是隐式的

除了您的
\uu del_u
方法外,您的大多数方法定义没有将
self
作为其第一个参数。Python不在乎参数的名称,它会将
self
插入方法定义中的第一个参数中。因此,您所有的方法(除了
\uuu del\uu
)都被错误的参数调用

另外,当您在该类的另一个方法中调用一个方法时,您需要指出这一点,通常是通过在该方法的名称前面加上
self.
。乙二醇

def transformValue(self, mylist):
    #The rest of the method definition
    #...

def myFunc(self, mylist):
    listValue = self.transformValue(mylist)
    return anotherCFunction(listValue)

我不明白
MyFunc()
应该做什么。为什么您向我们展示了
TransformValue()
的定义,而不是
TransformMacsValue()
的定义?什么是
c功能
?顺便说一句,在Python中,简单变量和函数的名称通常保持小写;大写的名称用于类。我已经编辑了我的代码(很抱歉输入错误),我看到Python在封装这些函数的类中调用了析构函数(标量上的垃圾(列表[I])因为他认为它是局部变量,所以您向我们展示的代码不应该存在垃圾收集问题?double的
选项卡是什么意思?感谢您修复了变量和函数名的大小写,但现在出现了一个新问题:使用
列表作为变量名会影响内置的
列表()
,因为普通变量和函数共享相同的名称空间。再次抱歉,我试图使测试用例更复杂,以解释我的问题抱歉,当我试图简化Python代码时,这是一个错误。这些函数没有嵌入到我的类中,感谢您的帮助clarification@parisjohn:啊!这就解释了为什么Python没有com我想你应该修复代码的缩进,这样就可以清楚地知道那些函数不应该是MyClass的一部分。请向我们展示您在何处创建MyClass实例的代码以及如何使用它,以便我们能够找到问题的真正原因。非常感谢您的帮助,但我的代码更复杂,目前我还没有成功地拥有一个简单的复制器
5
def transformValue(self, mylist):
    #The rest of the method definition
    #...

def myFunc(self, mylist):
    listValue = self.transformValue(mylist)
    return anotherCFunction(listValue)