473,385 Members | 1,922 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,385 software developers and data experts.

Help with C API

In the Python Cookbook, Luther Blisset wrote a very useful class with
the Python C API. It takes a Python list of elements and copies it
member by member into a C array.

Here it is, (slightly modified by me):

static PyObject *totaldoubles(PyObject *self, PyObject *args) {
PyObject *seq, *item, *fitem;
double *dbar, result;
int i, seqlen;

if (!PyArg_ParseTuple(args, "O", &seq)) return NULL;
seq = PySequence_Fast(seq, "argument must be iterable");
if (!seq) return NULL;

seqlen = PySequence_Fast_GET_SIZE(seq);
dbar = malloc(seqlen * sizeof(double));
if (!dbar) { Py_DECREF(seq); return NULL; }

for (i=0; i < seqlen; i++) {
item = PySequence_Fast_GET_ITEM(seq, i);
if (!item) { Py_DECREF(seq); free(dbar); return NULL; }
fitem = PyNumber_Float(item);
if (!fitem) { Py_DECREF(seq); free(dbar); return NULL; }
dbar[i] = PyFloat_AS_DOUBLE(fitem);
Py_DECREF(fitem);
}

Py_DECREF(seq);
result = total(dbar, seqlen); /*call a C function using this array*/
free(dbar);
return Py_BuildValue("d", result);
}

I'd like to do the reverse: take an C array (say, with 100 elements)
and copy its elements into a Python list. But I don't know where to
start...there's no PySequence_Fast_INSERT or even PySequence_Insert
function, for example. Can I create an empty list in the API or
should I just pass one in from Python?

Can someone please help with this? Thanks in advance!!

--Nick
Jul 18 '05 #1
4 1214
Nick Jacobson wrote:
....
I'd like to do the reverse: take an C array (say, with 100 elements)
and copy its elements into a Python list. But I don't know where to
start...there's no PySequence_Fast_INSERT or even PySequence_Insert
function, for example. Can I create an empty list in the API or
should I just pass one in from Python?

Can someone please help with this? Thanks in advance!!

--Nick


http://docs.python.org/api/listObjects.html is probably a good start

Regards,
Vincent Wehren


Jul 18 '05 #2
vincent wehren <vi*****@visualtrans.de> wrote in message news:<c6**********@news1.tilbu1.nb.home.nl>...
Nick Jacobson wrote:
...
I'd like to do the reverse: take an C array (say, with 100 elements)
and copy its elements into a Python list. But I don't know where to
start...there's no PySequence_Fast_INSERT or even PySequence_Insert
function, for example. Can I create an empty list in the API or
should I just pass one in from Python?

Can someone please help with this? Thanks in advance!!

--Nick


http://docs.python.org/api/listObjects.html is probably a good start

Regards,
Vincent Wehren

Thank you!

This is what I ended up writing:

static PyObject *ex_arytopylist(PyObject *self, PyObject *args) {
PyObject *seq = NULL, *fitem = NULL;
double dbar[] = { 1, 2, 3 };
int i, seqlen = sizeof(dbar) / sizeof(double);

seq = PyList_New(0);
if (!seq) return NULL;

for (i=0; i < seqlen; i++) {
fitem = PyFloat_FromDouble(dbar[i]);
if (!fitem) { Py_DECREF(seq); return NULL; }
if (PyList_Append(seq, fitem))
{ Py_DECREF(fitem); Py_DECREF(seq); return NULL; }
Py_DECREF(fitem);
}
return Py_BuildValue("O", seq);
}

My only question is, since PyList_New(0) and Py_BuildValue both
increment the ref count of seq, is it garbage collected properly? Or
perhaps I should just write:

return seq;

Thanks!
Jul 18 '05 #3
I don't think I'm stating my question clearly. :(

Say I create a list in my C function:
seq = PyList_New(0);
Then append some numbers to it, whatever.

Then, when I return from the C function and want to use that list in
my Python code, do I have to increment its refcount:
return Py_BuildValue("O", seq);

Or do I leave it alone and say:
return seq;

Thanks in advance.
Jul 18 '05 #4
"Nick Jacobson" wrote:
I don't think I'm stating my question clearly. :(

Say I create a list in my C function:
seq = PyList_New(0);
Then append some numbers to it, whatever.

Then, when I return from the C function and want to use that list in
my Python code, do I have to increment its refcount:
return Py_BuildValue("O", seq);

Or do I leave it alone and say:
return seq;

Thanks in advance.


Grepping through the modules shipped w/ Python seems to suggest that you
should just return it since calling PyList_New() returns a new reference.
See for example its use in the strop module (http://tinyurl.com/25s4e) which
does something similar to what you describe.

HTH,

John
Jul 18 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

21
by: Dave | last post by:
After following Microsofts admonition to reformat my system before doing a final compilation of my app I got many warnings/errors upon compiling an rtf file created in word. I used the Help...
9
by: Tom | last post by:
A question for gui application programmers. . . I 've got some GUI programs, written in Python/wxPython, and I've got a help button and a help menu item. Also, I've got a compiled file made with...
6
by: wukexin | last post by:
Help me, good men. I find mang books that introduce bit "mang header files",they talk too bit,in fact it is my too fool, I don't learn it, I have do a test program, but I have no correct doing...
3
by: Colin J. Williams | last post by:
Python advertises some basic service: C:\Python24>python Python 2.4.1 (#65, Mar 30 2005, 09:13:57) on win32 Type "help", "copyright", "credits" or "license" for more information. >>> With...
7
by: Corepaul | last post by:
Missing Help Files When I enter "recordset" as the keyword and search the Visual Basic Help index, I get many topics of interest in the resulting list. But there isn't any information available...
5
by: Steve | last post by:
I have written a help file (chm) for a DLL and referenced it using Help.ShowHelp My expectation is that a developer using my DLL would be able to access this help file during his development time...
8
by: Mark | last post by:
I have loaded Visual Studio .net on my home computer and my laptop, but my home computer has an abbreviated help screen not 2% of the help on my laptop. All the settings look the same on both...
10
by: JonathanOrlev | last post by:
Hello everybody, I wrote this comment in another message of mine, but decided to post it again as a standalone message. I think that Microsoft's Office 2003 help system is horrible, probably...
1
by: trunxnirvana007 | last post by:
'UPGRADE_WARNING: Array has a new behavior. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"' 'UPGRADE_WARNING: Couldn't resolve...
0
by: hitencontractor | last post by:
I am working on .NET Version 2003 making an SDI application that calls MS Excel 2003. I added a menu item called "MyApp Help" in the end of the menu bar to show Help-> About. The application...
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.