Movatterモバイル変換


[0]ホーム

URL:


[Python-ideas] namedtuple fields with default values

Eric V. Smitheric at trueblade.com
Fri Jul 17 16:59:05 CEST 2015


-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA1On 07/17/2015 10:44 AM, Barry Warsaw wrote:> On Jul 16, 2015, at 01:03 PM, Russell Kaplan wrote:>>> I'm using a namedtuple to keep track of several fields, only>> some of which ever need to be specified during instantiation.>> However, there is no Pythonic way to create a namedtuple with>> fields that have default values.>> I don't know about "Pythonic" but there's a not too horrible way> to do it:>> _Record = namedtuple('Record', 'url destination checksum')('', '',> '')>> def Record(url, destination, checksum=''): return _Record._replace(> url=url, destination=destination, checksum=checksum)>> Now you only need to provide 'url', and 'destination' when you> create a Record.  Okay, sure _Record is the actual namedtuple, but> I usually don't care.>>> Having to assign to Foo.__new__.__defaults__ is a bit ugly. I>> think it would be easier and more readable to support syntax>> like:>>>>> Foo = namedtuple('Foo', ['optional_bar=None',>>>>> 'optional_baz=None'])>> That would mean you couldn't ever have an actual parameter called> 'optional_bar'.>>> This suggestion is fully backwards compatible and allows for>> cleaner definitions of nametuples with default-value fields.>> Thanks for considering.>> Not that I think anything really needs to be done, but a few other> approaches could be:>> * Allow for arbitrary keyword arguments at the end of the> signature to define default values.>> Record = namedtuple('Record', 'url destination checksum',> checksum='')>> * Extend the semantics of field_names to allow for a dictionary of> attributes mapping to their default values, though you'd need a> marker to be able to specify a required field:>> Record = namedtuple('Record', dict(url=Required,> destination=Required, checksum=''))>> I suppose I'd prefer the former, although that might cut off the> ability to add other controlling arguments to the namedtuple()> API.I've implemented default parameters to namedtuples (and namedlists amutable version) inhttps://pypi.python.org/pypi/namedlistThe syntax is not great, but none of the options are awesome.>>> Point = namedlist.namedtuple('Point', [('x', 0), ('y', 100)])>>> p = Point() assert p.x == 0 assert p.y == 100-----BEGIN PGP SIGNATURE-----Version: GnuPG v1.4.14 (GNU/Linux)iQEcBAEBAgAGBQJVqRg5AAoJENxauZFcKtNxLSYH/iC2Twf2xYhAbtKdMF7nSvG2xOhhePDOBWl4K9cUVgg0z4jRsnGgL8O8FPCGVmsrBu8arseVAQbsFiAcOsmlKy3kXZGYQ61KPlDUcqxIO661cOWDiRJG/I9ltQHlafODEs4qGJfox2BeM5aCo+cIpyhkuC7wJ/t9mJ9uKvv6mG/e1GixzKtgcCO86NfYwIqiwaZWsKnjkqNzQ1peKm6pGRTK34u7oCu6EGbqNCUdAJx9Re6Umcs37FH/f3uyc2luJyP9z1p1zz2Ndb00NwOvsGKKNJw5enVB6/qC+sGZDicE1lJmij/MwdTbu/+Fl+JxjZeMGeRWJ9PEyHaxmuZAzw8==ZXBa-----END PGP SIGNATURE-----


More information about the Python-ideasmailing list

[8]ページ先頭

©2009-2026 Movatter.jp