Le jeudi 05 octobre 2006 15:52, Steve Holden a écrit : > > But what prevents to interpret literals as a call to __builtins__ objects > > and functions ? optimization ? what else ? > > > When are literals interpreted? During translation into bytecode.
agreed, but what's the problem with this ? We can actually monkey patch all buitins like in this example : In [1]: oldstr=str In [2]: class mystr(str) : ...: def __new__(*a, **kw) : ...: print 'called : ', a, kw ...: return oldstr.__new__(*a, **kw) ...: ...: In [3]: import __builtin__ In [4]: __builtin__.str = mystr called : (<class '__main__.mystr'>, <ItplNS 'In [${self.cache.prompt_count}]: ' >) {} called : (<class '__main__.mystr'>, 5) {} ... If the generated bytecode of {k:v} is more or less the same as the one gernerated by dict(((k,v))), monkey patching dict will work for dict literals too. Also, this should work with scalars, 'a string' be translated in what actually is produced by str('a string') (of course the internal code for building scalars should still be there). If that is feasible without big refactoring and do not introduce noticeable performance loss is what I don't know, but it could be a nice feature of __builtin__ module IMO (at less I expected it to work like this when I first tried it). -- _____________ Maric Michaud _____________ Aristote - www.aristote.info 3 place des tapis 69004 Lyon Tel: +33 426 880 097 -- http://mail.python.org/mailman/listinfo/python-list