Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #75727

Re: eval [was Re: dict to boolean expression, how to?]

Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!newsfeed.fsmpi.rwth-aachen.de!news-1.dfn.de!news.dfn.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From Duncan Booth <duncan.booth@invalid.invalid>
Newsgroups comp.lang.python
Subject Re: eval [was Re: dict to boolean expression, how to?]
Date 5 Aug 2014 11:57:55 GMT
Lines 56
Message-ID <XnsA38083DC7DF21duncanbooth@127.0.0.1> (permalink)
References <53db8bd8$0$2976$e4fe514c@news2.news.xs4all.nl> <53dba39e$0$2976$e4fe514c@news2.news.xs4all.nl> <mailman.12517.1406907906.18130.python-list@python.org> <53dc5407$0$29986$c3e8da3$5496439d@news.astraweb.com>
Reply-To duncan.booth@suttoncourtenay.org.uk
Mime-Version 1.0
Content-Type text/plain; charset=iso-8859-1
Content-Transfer-Encoding 8bit
X-Trace individual.net r55xq/4xFp9QdjbKkpPvTAA2sqWgAWq6l4G6Rpmym6coHqwm6Y
Cancel-Lock sha1:qfJoOTrThEZVnyXRzXiAMQeoRLE=
User-Agent Xnews/2006.08.24 Hamster/2.1.0.11
X-Face .C;/v3#w@2k.C(.1v-}d=`|7AQ-%,#A$0ZGtAkLPvuawAM>3#D,pXaAb31%(=Gn2ZZK/Z~fd0y4't5iKK~F":}F2*|\mQYX+BUr4ZM*|+`@o-TKzFGwsJnan{)*b~QJ-Fu^u'$$nYV
Xref csiph.com comp.lang.python:75727

Show key headers only | View raw


Steven D'Aprano <steve+comp.lang.python@pearwood.info> wrote:

> Consider the namedtuple implementation in the standard library.
> There's a lot of criticism of it, some of it justified. It uses exec
> extensively, which means the code is dominated by a giant string
> template. This defeats your editor's syntax colouring, makes
> refactoring harder, and makes how the namedtuple works rather less
> understandable. It seems to me that it's only generating the __new__
> method which genuinely needs to use exec, the rest of the namedtuple
> could and should use just an ordinary class object (although I concede
> that some of this is just a matter of personal taste).
> 
> Raymond Hettinger's original, using exec for the entire inner class:
> 
> http://code.activestate.com/recipes/500261-named-tuples/
> 
> 
> My refactoring, with the bare minimum use of exec necessary:
> 
> https://code.activestate.com/recipes/578918-yet-another-namedtuple/


This may be a silly question, but what would stop you moving the exec inside the class?

So:
    ns = {'_new': tuple.__new__}

    class Inner(tuple):
        # Work around for annoyance: type __doc__ is read-only :-(
        __doc__ = ("%(typename)s(%(argtxt)s)"
                   % {'typename': typename, 'argtxt': argtxt})

        __slots__ = ()
        _fields = field_names

        exec """def __new__(_cls, %(argtxt)s):
        return _new(_cls, (%(argtxt)s))""" % { 'argtxt': argtxt } in ns, locals()

... and so on ...

and remove lines from 'ns = ...' to 'Inner.__new__ = ...'

The tests at the end of the file still pass so I'm not sure whether there is any situation
that wouldn't work.

For that matter I don't understand why tuple.__new__ needs to be pre-bound. Just referring 
to tuple.__new__ directly in the exec simplifies things even more as there is no need to 
specify any namespaces.

        exec """def __new__(_cls, %(argtxt)s):
        return tuple.__new__(_cls, (%(argtxt)s))""" % { 'argtxt': argtxt }

also passes the tests.

-- 
Duncan Booth 

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

dict to boolean expression, how to? Alex van der Spek <zdoor@xs4all.nl> - 2014-08-01 12:45 +0000
  Re: dict to boolean expression, how to? Chris Angelico <rosuav@gmail.com> - 2014-08-01 23:04 +1000
  Re: dict to boolean expression, how to? Roy Smith <roy@panix.com> - 2014-08-01 09:24 -0400
  Re: dict to boolean expression, how to? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-01 13:28 +0000
    Re: dict to boolean expression, how to? Roy Smith <roy@panix.com> - 2014-08-01 09:32 -0400
      Re: dict to boolean expression, how to? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-01 15:02 +0000
        Re: dict to boolean expression, how to? Terry Reedy <tjreedy@udel.edu> - 2014-08-01 18:16 -0400
    Re: dict to boolean expression, how to? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-08-01 16:50 +0100
      Re: dict to boolean expression, how to? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-01 16:35 +0000
  Re: dict to boolean expression, how to? Alex van der Spek <zdoor@xs4all.nl> - 2014-08-01 14:26 +0000
    Re: dict to boolean expression, how to? marco.nawijn@colosso.nl - 2014-08-01 08:07 -0700
    Re: dict to boolean expression, how to? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-01 15:24 +0000
      Re: dict to boolean expression, how to? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-08-01 17:03 +0100
    Re: dict to boolean expression, how to? Peter Otten <__peter__@web.de> - 2014-08-01 17:44 +0200
      eval [was Re: dict to boolean expression, how to?] Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-02 02:59 +0000
        Re: eval [was Re: dict to boolean expression, how to?] Peter Otten <__peter__@web.de> - 2014-08-02 09:43 +0200
        Re: eval [was Re: dict to boolean expression, how to?] Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-08-02 08:59 +0100
        Re: eval [was Re: dict to boolean expression, how to?] Duncan Booth <duncan.booth@invalid.invalid> - 2014-08-05 11:57 +0000
          Re: eval [was Re: dict to boolean expression, how to?] Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-06 02:25 +1000
    Re: dict to boolean expression, how to? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-08-01 17:12 +0100
    Re: dict to boolean expression, how to? Peter Pearson <ppearson@nowhere.invalid> - 2014-08-01 17:00 +0000
  Re: dict to boolean expression, how to? Ned Batchelder <ned@nedbatchelder.com> - 2014-08-01 10:29 -0400

csiph-web