6.2.4.2.1. napply

Comienzo python section to interscript/core/mxTools.py[2 /26 ] Siguiente Previo Primero Último
     5: #line 265 "mxTools.pak"
     6: def napply(number_of_calls, function, args=(), kw = {}):
     7:   alist = []
     8:   for i in range(number_of_calls):
     9:     alist.append(apply(function, args, kw))
    10:   return tuple(alist)
End python section to interscript/core/mxTools.py[2]
Comienzo C section to interscript/core/mxTools.c[3 /30 ] Siguiente Previo Primero Último
   184: #line 271 "mxTools.pak"
   185: 
   186: Py_C_Function( mxTools_napply,
   187:                "napply(number_of_calls,function,args=(),kw={})\n\n"
   188:                "Calls the function number_of_calls times with the same\n"
   189:                "arguments and returns a tuple with the return values.")
   190: {
   191:     int count;
   192:     register int i;
   193:     PyObject *func,*arg = 0,*kw = 0;
   194:     PyObject *w = 0;
   195: 
   196:     Py_Get4Args("iO|OO",count,func,arg,kw);
   197: 
   198:     Py_XINCREF(arg);
   199: 
   200:     w = PyTuple_New(count);
   201:     if (w == NULL)
   202:         goto onError;
   203: 
   204:     if (arg == NULL)
   205:         arg = PyTuple_New(0);
   206:     if (arg == NULL)
   207:         goto onError;
   208: 
   209: #ifdef PyCFunction_GET_FUNCTION
   210:     /* Short-cut for C functions, taken from ceval.c:call_builtin();
   211:        Note: this only works and is used together with my patched
   212:        version of the interpreter. XXX Update when ceval.c changes !!! */
   213:     if (PyCFunction_Check(func)) {
   214:         register PyCFunction meth = PyCFunction_GET_FUNCTION(func);
   215:         register PyObject *self = PyCFunction_GET_SELF(func);
   216:         int flags = PyCFunction_GET_FLAGS(func);
   217: 
   218:         if (!(flags & METH_VARARGS)) {
   219:             int size = PyTuple_GET_SIZE(arg);
   220:             if (size == 1)
   221:                 arg = PyTuple_GET_ITEM(arg, 0);
   222:             else if (size == 0)
   223:                 arg = NULL;
   224:         }
   225:         if (flags & METH_KEYWORDS)
   226:             for (i = 0; i < count; i++) {
   227:                 register PyObject *v;
   228: 
   229:                 v = (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
   230:                 if (v == NULL)
   231:                     goto onError;
   232:                 PyTuple_SET_ITEM(w,i,v);
   233:             }
   234:         else {
   235:             if (kw != NULL && PyDict_Size(kw) != 0) {
   236:                 PyErr_SetString(PyExc_TypeError,
   237:                                 "this function takes no keyword arguments");
   238:                 return NULL;
   239:             }
   240:             for (i = 0; i < count; i++) {
   241:                 register PyObject *v;
   242: 
   243:                 v = (*meth)(self, arg);
   244:                 if (v == NULL)
   245:                     goto onError;
   246:                 PyTuple_SET_ITEM(w,i,v);
   247:             }
   248:         }
   249:     }
   250:     else
   251: #endif
   252:         for (i = 0; i < count; i++) {
   253:             register PyObject *v;
   254: 
   255:             v = PyEval_CallObjectWithKeywords(func,arg,kw);
   256:             if (v == NULL)
   257:                 goto onError;
   258:             PyTuple_SET_ITEM(w,i,v);
   259:         }
   260: 
   261:     Py_XDECREF(arg);
   262:     return w;
   263: 
   264:  onError:
   265:     Py_XDECREF(w);
   266:     Py_XDECREF(arg);
   267:     return NULL;
   268: }
   269: 
End C section to interscript/core/mxTools.c[3]