On Fri, 8 May 2020 17:40:31 -0700
Andrew Barnert via Python-ideas <[email protected]> wrote:
> So, the OP is right that (1,2,3)==[1,2,3] would sometimes be handy,
> the opponents are right that it would often be misleading, and the
> question isn’t which one is right ...
That's a good summary. Thank you. :-)
> [1] If anyone still wants to argue that using a tuple as a hashable
> sequence instead of an anonymous struct is wrong, how would you change
> this excerpt of code:
>
> memomean = memoize(mean, key=tuple)
> def player_stats(player):
> # …
> … = memomean(player.scores) …
> # …
>
> Player.scores is a list of ints, and a new one is appended after each
> match, so a list is clearly the right thing. But you can’t use a list
> as a cache key. You need a hashable sequence of the same values. And
> the way to spell that in Python is tuple.
Very clever. Then again, it wouldn't be python-ideas if it were that
simple! "hashable sequence of the same values" is too strict. I think
all memoize needs is a key function such that if x != y, then key(x) !=
key(y).
def key(scores):
','.join(str(-score * 42) for score in scores)
memomean = memoize(mean, key=key)
def player_stats(player):
# …
… = memomean(player.scores) …
# …
Oh, wait, even that's too strict. All memoize really needs is if
mean(x) != mean(y), then key(x) != key(y):
memomean = memoize(mean, key=mean)
def player_stats(player):
# …
… = memomean(player.scores) …
# …
But we won't go there. ;-)
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/BGHFJV2LKC7RYMZS6ZJTM26X4ADNXJNR/
Code of Conduct: http://python.org/psf/codeofconduct/