[Tutor] Python functions are first-class citizens
memilanuk
memilanuk at gmail.com
Fri Aug 1 07:12:49 CEST 2014
On 07/31/2014 08:22 PM, Ben Finney wrote:
> memilanuk <memilanuk at gmail.com> writes:
>> So... the similarity between dict.get() and dict.get as used here is
>> kinda confusing me.
>
> I hope that helps. They are the same function; but the former is
> *calling* the function object, and optionally using the return value;
> the latter is referring to the function object *as* a value.
Conceptually, that makes sense. Practically... having a little trouble
getting my head around it - see below.
>> max_key = max(counts, key=counts.get)
>
> This specifies ‘counts.get’, without calling it. The expression
> ‘counts.get’ evaluates to that function object.
>
> That value is then used as the value for the ‘key’ parameter when
> calling ‘max’ here.
Been reading a bit more in the mean time, trying to grok that 'key'
parameter for max()... and of course the python docs for max(iterable,
key=) refer to the docs for list.sort() ;)
Kind of diverging off the original question a bit... but since it did
include the max() code in it... I'm having a bit of difficulty with the
whole 'key=' parameter when combined with counts.get here.
So counts is the iterable, and counts.get is the key used to iterate
through it?
I guess I'm not getting how the whole key, function object bit works
here in actual practice.
if we have
counts = {'a':1, 'b':22, 'c':100}
then counts.get('b') should return 22. I got that much.
And counts.get is just an uncalled version of that:
foo = counts.get
foo('b')
should return 22 as well. Think I got that as well.
Where things are going pear-shaped is how counts.get can function as a
'key' when we don't actually supply () (or anything inside them) to
specify what k,v pair we want, and how that relates back to the iterable
for max(), counts?
Monte
--
Shiny! Let's be bad guys.
Reach me @ memilanuk (at) gmail dot com
More information about the Tutor
mailing list