I need to be able to store a list of schedulable items, either regular
callables or generator-producing functions -- is there a way to test if a fn
is generator-producing? (In the non-generator case, the fn is a 'tick' fn
that I will call to produce results - a pre-generator implementation.)
I can test for a generator itself with isinstance(f, types.GeneratorType),
but I'm interested in the fn that produces it. For example:
if isGeneratorFn(f):
f = f()
f.next() ...
else:
f()...
If not, I guess it's fairly easy to specify a fn attr like so:
def myGen(): yield foo
myGen.isGenerator = True
but this is not as easy for instance methods, it seems. (No?)
(BTW, +1 from me for PEPs with syntax that let you specify attrs for fn's
and methods in-line with the def'n for cases like this, 'staticmethod', &c.
No reason that c# should win on this one...)
I would call f() the first time and see if the result is a generator object,
but unfortunately in my case returning a generator is possible valid 'data'
(to be scheduled later) and doesn't mean I should call .next() straight
away.
Ideas?
thanks 3 1888
"Mike" <vi********@yahoo.com> wrote in message
news:gGfhb.528065$Oz4.405020@rwcrnsc54... I need to be able to store a list of schedulable items, either
regular callables or generator-producing functions -- is there a way to test
if a fn is generator-producing?
Yes, but I forget how. The ref-man section on type hierarchy lists
and explains 'special attributes' for each type. Functions or code
objects have an indication of normal vs. generator.
TJR
Hello Mike, I need to be able to store a list of schedulable items, either regular callables or generator-producing functions -- is there a way to test if a fn is generator-producing?
if you do def f(): return 1 dir(f)
and def f(): yield 1
dir(g)
You'll see that g has many attributes that f doesnt. Maybe you can use one of them.
if isGeneratorFn(f): f = f() f.next() ... else: f()...
IMO a better way is letting the caller passing you ONLY functions.
In case of a generator if should pass the .next of the generator.
e.g.
l = []
def add_func(f):
l.append(f)
def add_gen(g):
l.append(g().next)
for f in l:
print f()
HTH.
Miki
"Miki Tebeka" <mi***@zoran.co.il> wrote in message You'll see that g has many attributes that f doesnt. Maybe you can use one
of them.
Hmm - doesn't seem so here: def g(): yield None dir(g)
['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get__',
'__getattribute__', '__hash__', '__init__', '__module__', '__name__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__str__', 'func_closure', 'func_code', 'func_defaults', 'func_dict',
'func_doc', 'func_globals', 'func_name'] def f(): return None dir(f)
['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get__',
'__getattribute__', '__hash__', '__init__', '__module__', '__name__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__str__', 'func_closure', 'func_code', 'func_defaults', 'func_dict',
'func_doc', 'func_globals', 'func_name']
IMO a better way is letting the caller passing you ONLY functions. In case of a generator if should pass the .next of the generator. ...code...
As I said, I can't do that becuase I'm saving the items to be scheduled
(evaluated lazily) -- I don't want to call f() or f.next() right right away.
(The code sample could have included the comment "# much later..." between
getting the funarg and calling it.)
Ahh -- Looks like the original PEP (255) held the key:
hex(f.func_code.co_flags)
'0x43' hex(g.func_code.co_flags)
'0x63'
---
mike This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: TheDustbustr |
last post by:
<code>
from __future__ import generators
from time import time
threads=
def sleep(n):
print "In Sleep"
t=time()
while (t+n>time()):
yield None
|
by: Joe |
last post by:
Hi, I have been working on some code that requires a high use of random
numbers within. Mostly I either have to either:
1) flip a coin i.e. 0 or 1, or
2) generate a double between 0 and 1.
I...
|
by: XSD-optimist |
last post by:
I am trying to generate the classes for an XSD schema using the
Microsoft XSD Object Code Generator (XSDObjGen).
I am having a schema that contains the definition of the following:
1. a complex...
|
by: Bernhard Mulder |
last post by:
I have something like the following (using Python 2.5 syntax):
class adapt(object):
def __init__(self):
self.iterator = self.generator()
self.n = 0
def generator(self):
while True:
while...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
| |
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 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 a new...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
|
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...
| |