By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,675 Members | 2,270 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,675 IT Pros & Developers. It's quick & easy.

article on Python 2.5 features

P: n/a
A Parade of New Features Debuts in Python 2.5
by Gigi Sayfan
"Python 2.5 still has the smell of fresh paint but it's the perfect
time to drill down on the most important new features in this
comprehensive release. Read on for detailed explanations and examples
of exception handling, resource management, conditional expressions,
and more."

The full article is at
http://www.devx.com/webdev/Article/33005/0/page/1 .

Nov 13 '06 #1
Share this Question
Share on Google+
1 Reply


P: n/a
Beliavsky wrote:
A Parade of New Features Debuts in Python 2.5
by Gigi Sayfan
"Python 2.5 still has the smell of fresh paint but it's the perfect
time to drill down on the most important new features in this
comprehensive release. Read on for detailed explanations and examples
of exception handling, resource management, conditional expressions,
and more."

The full article is at
http://www.devx.com/webdev/Article/33005/0/page/1 .
The article is nice overall, but I did not like the part about enhanced
generators. For instance, the sentence "The new interactive send()
empowers
generators to implement co-routines", could be debated. Also, it gives
you the false impression that you could not interact with Python 2.2
generators ("interact" in the sense of the article). IMO the important
bit about Python 2.5 generators is that you can send exceptions to
a generator, all the other features can be emulated even using revious
versions of Python.
For instance, here is an emulation of his tokenizer using Python 2.2
generators and a helper 'read_eval_yield_loop' class:

# morally turns a Python 2.2+ generator into a Python 2.5 generator
class read_eval_yield_loop(object):
def __init__(self, gen, *args, **kw):
self._arg = None
self._it = gen(iter(lambda : self._arg, StopIteration), *args,
**kw)
def __iter__(self):
return self._it
def send(self, arg):
self._arg = arg
return self._it.next()
def next(self):
return self.send(None)

# copied from the article with very minor changes
def tokenizer3(read, text, sep):
try:
while True:
token = ''
while text[0] == sep:
text = text[1:]

index = 0
while text[index] != sep:
token += text[index]
index += 1
yield token
new_sep = read.next()
if new_sep != None:
sep = new_sep
text = text[index:]
except IndexError:
if token != '':
yield token

if __name__=='__main__':
print '--- Smart Python 2.2+ tokenizer ---'
g = read_eval_yield_loop(tokenizer3, text, ' ')
for t in g:
print t
if t == 'comma':
g.send(',')

Michele Simionato

Nov 13 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.