&gt;&gt; Do you have commit access? What&#39;s your real name?<br>I prefer to remain pseudonymous, and I don&#39;t have commit access.<br><br>Yeah... they&#39;re not terribly useful - more or less there for the sake of being there. Batteries included and all that
<br>
<br>
<br>
...but now I&#39;ve got a more useful idea for a function wrapper
around predicate functions to make them a little more functionally inclined. Something like.......<br>
<br>
@predicate<br>def hasnext(x): return hasattr(x, &quot;next&quot;)<br>
<br>
@predicate<br>
def hasiter(x): return hasattr(x, &quot;__iter__&quot;)<br>
<br>
isiterable&nbsp;&nbsp; = hasnext or hasiter&nbsp;&nbsp; #or/and/not operators construct new predicate functions<br>
<br>
isEmptyIterable = isiterable and not predicate(bool)<br>
<br>
isgenerator = isiterable and (lambda x: hasattr(x, &quot;send&quot;) and hasattr(x, &quot;throw&quot;))<br>
<br>
filter(isgenerator or callable, SomeSequence)<br>
<br>-- <br>&quot;What&#39;s money? A man is a success if he gets up in the morning and goes to bed at night and in between does what he wants to do.&quot; ~ Bob Dylan