Python

Lambda expression in Python

Ngoài cách tạo function với statement def, chúng ta còn có thể sử dụng lambda expression:

lambda arg1, arg2, … : expression

Trong lambda expression, các tham số (arg1, arg2,…) tương tự như khi ta dùng statement def để tạo function; expression là biểu thức được trả về sau mỗi lần gọi.

Example 1:

>>> L = lambda a, *b, **c:[a,b,c]
>>> L(1, 2, 3, x=1, y=2)
[1, (2, 3), {'y':2, 'x':1}]
>>> L(5, 6, 7, 8, x=10, y=20)
[5, (6, 7, 8), {'y':20, 'x':10}]

Trong ví dụ trên ta thấy rằng lambda expression hỗ trợ đầy đủ các argument format như khi ta dùng trên function.

Bởi vì lambda là một expression, không phải statement nên nó có thể được sử dụng ở những nơi mà def function không thể, nhưng cũng vì thế mà nó không phù hợp cho các yêu cầu phức tạp.

Example 2: Map with Lambda expression.

>>> list(map(lambda x: x*10, [1,2,3,4,5]))
[10,20,30,40,50]

Example 3: Sort with Lamda expression

>>> student = [("Anna", 10), ("Dima", 9), ("Masha", 10), ("Anton", 8)]
>>> sorted(student, key=lambda x: x[1], reverse=True)
[("Anna", 10), ("Masha", 10), ("Dima", 9),("Anton", 8)]

Trong ví dụ này, chúng ta đã sắp xếp lại list student theo điểm số bằng cách dùng key=lambda x: x[1]. Nếu không dùng tham số key, mặc định function sorted sẽ sắp xếp theo tên của từng sinh viên trong list student.

Example 4: Itertools.groupby with lambda

Function itertools.groupby() cho phép chúng ta nhóm các dữ liệu có chung grouping-key lại với nhau. Các tham số đưa vào gồm: dữ liệu để nhóm và key-function. Kết quả trả về là một iterator, trong đó chứa keysub-iterator group.

>>> from itertools import groupby
>>> instruments = [("gun", "police"), ("pen", "student"), ("pencil", "student"), ("ruler", "student"), ("screwdrivers", "engineer"), ("pliers", "engineer")]
>>> for key, group in groupby(instruments, lambda x: x[1]):
...    print(key)
...    print(list(group))
...
police
[("gun", "police")]
student
[("pen", "student"), ("pencil", "student"), ("ruler", "student")]
engineer
[("screwdrivers", "engineer"), ("pliers", "engineer")]

Trong ví dụ trên, ta đã sử dụng lambda x: x[1] để chỉ cho function groupby sử dụng phần tử thứ 2 trong mỗi tuple làm grouping key.

Reference:
[1] Itertools groupby.
[2] How do I use Python’s itertools.groupby()?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s