Quote:and until a mid-size wonder occurs that send me a understandable (sic!) explanation of lambda expressions in python, I don't know how this ever could be changed.
Some addition to @Ofnuts explanation.
lambda
could have had a better name like
make_function
.
So lambda is making a function with no name(anonymous functions),and
def name
making a function with name.
>>> def plus_2(arg):
... return arg + 2
...
>>> plus_2
<function plus_2 at 0x036CF540>
>>> lambda arg: arg + 2
<function <lambda> at 0x036CF4F8>
>>> type(plus_2)
<class 'function'>
>>> type(lambda arg: arg + 2)
<class 'function'
Using it by given argument:
>>> plus_2(4)
6
>>> (lambda arg: arg + 2)(4)
6
>>> # Or could assigning to a variable name
>>> plus_2 = lambda arg: arg + 2
>>> plus_2(4)
6
Back to sorting:
>>> lst = [('Tom', 'C', 10), ('Kent', 'A', 12), ('Jenny', 'B', 15)]
>>> sorted(lst, key=lambda tup: tup[1])
[('Kent', 'A', 12), ('Jenny', 'B', 15), ('Tom', 'C', 10)]
we could make a named function,there is no magic
>>> def sort_middle(tup):
... return tup[1]
...
>>> lst = [('Tom', 'C', 10), ('Kent', 'A', 12), ('Jenny', 'B', 15)]
>>> sorted(lst, key=sort_middle)
[('Kent', 'A', 12), ('Jenny', 'B', 15), ('Tom', 'C', 10)]