zoukankan      html  css  js  c++  java
  • Python Cookbook(第3版)中文版:15.20 处理C语言中的可迭代对象

    15.20 处理C语言中的可迭代对象

    问题

    你想写C扩展代码处理来自任何可迭代对象如列表、元组、文件或生成器中的元素。

    解决方案

    下面是一个C扩展函数例子,演示了怎样处理可迭代对象中的元素:

    static PyObject *py_consume_iterable(PyObject *self, PyObject *args) {
      PyObject *obj;
      PyObject *iter;
      PyObject *item;
    
      if (!PyArg_ParseTuple(args, "O", &obj)) {
        return NULL;
      }
      if ((iter = PyObject_GetIter(obj)) == NULL) {
        return NULL;
      }
      while ((item = PyIter_Next(iter)) != NULL) {
        /* Use item */
        ...
        Py_DECREF(item);
      }
    
      Py_DECREF(iter);
      return Py_BuildValue("");
    }
    

    讨论

    本节中的代码和Python中对应代码类似。
    PyObject_GetIter() 的调用和调用 iter() 一样可获得一个迭代器。
    PyIter_Next() 函数调用 next 方法返回下一个元素或NULL(如果没有元素了)。
    要注意正确的内存管理—— Py_DECREF() 需要同时在产生的元素和迭代器对象本身上同时被调用,
    以避免出现内存泄露。

    艾伯特(http://www.aibbt.com/)国内第一家人工智能门户

  • 相关阅读:
    hbase
    spark-streaming
    spark-Scala
    经典台词二
    星爷电影经典台词一
    Hadoop第一阶段总结
    测试2
    POI 表格数据导出
    GC垃圾回收机制
    Java常见的200道面试题
  • 原文地址:https://www.cnblogs.com/aibbtcom/p/8542735.html
Copyright © 2011-2022 走看看