[Python-Dev] PEP 572: Assignment Expressions (original) (raw)

Steven D'Aprano steve at pearwood.info
Tue Apr 24 19:19:11 EDT 2018


On Tue, Apr 24, 2018 at 10:42:35PM +0200, Sven R. Kunze wrote:

gcd(diff, n) is to me a perfect name, and please don't tell me g is better. ;)

Sorry, gcd(diff, n) is not the "perfect name", and I will tell you that sometimes g is better.

Which would you prefer to see and read?

g = gcd(diff, n) result = [g, g+2, 3*g, g**5]

or:

result = [gcd(diff, n), gcd(diff, n)+2, 3*gcd(diff, n), gcd(diff, n)**5]

Forget about the inefficiency of calculating the same result over and over again. Just think about reading the code, especially aloud. If you were describing the code to a colleague, would you really repeat the phrase "gcd of diff, n" four separate times? I don't know about you, but I wouldn't, and I wouldn't want to read it four separate times.

Think about having to edit it. Would you rather edit it in one place or four? Even close together, in a single expression, it is annoying to have "gcd(diff, n)" repeated over and over again.

To me it seems, that many people consider functionofparameter a better name than function(parameter). IMO it isn't.

Of course not. But in some contexts, p is a much better name than function(parameter). In other contexts, something more descriptive will be a better name:

page_count = (len(document.chapter[previous_chapter].pages()) 
              + len(document.chapter[this_chapter].pages()))

page_count is a MUCH better name than repeating

(len(document.chapter[previous_chapter].pages())
 + len(document.chapter[this_chapter].pages()))

over and over again, even if it is a pure function.

I've seen lots of code where people do things like fooofbar = bar['foo']. Because they don't want another dict access, or they think it better reflects the concept. But it does not as does not g. Writing gcd(diff, n) twice is not more repeating as is writing fooofbar twice. Because gcd is a pure function

You might know that, but how does somebody reading the code know which functions are pure and which are not? How does the compiler know?

It's easy to say that you recognise gcd as a pure function. How about len(document.chapter[this_chapter].pages()), is that a pure function?

-- Steve



More information about the Python-Dev mailing list