xem xét như sau:Python biểu thức lambda
>>> a=2
>>> f=lambda x: x**a
>>> f(3)
9
>>> a=4
>>> f(3)
81
Tôi muốn cho f
không thay đổi khi a
được thay đổi. Cách tốt nhất để làm điều này là gì?
xem xét như sau:Python biểu thức lambda
>>> a=2
>>> f=lambda x: x**a
>>> f(3)
9
>>> a=4
>>> f(3)
81
Tôi muốn cho f
không thay đổi khi a
được thay đổi. Cách tốt nhất để làm điều này là gì?
Một lựa chọn khác là tạo ra một đóng cửa:
>>> a=2
>>> f = (lambda a: lambda x: x**a)(a)
>>> f(3)
9
>>> a=4
>>> f(3)
9
Điều này đặc biệt hữu ích khi bạn có nhiều hơn một đối số:
f = (lambda a, b, c: lambda x: a + b * c - x)(a, b, c)
hoặc thậm chí
f = (lambda a, b, c, **rest: lambda x: a + b * c - x)(**locals())
Bạn cần phải ràng buộc a
để một đối số từ khóa khi xác định lambda
:
f = lambda x, a=a: x**a
Bây giờ a
là một địa phương (ràng buộc như một tham số) thay vì một tên toàn cầu.
Demo:
>>> a = 2
>>> f = lambda x, a=a: x**a
>>> f(3)
9
>>> a = 4
>>> f(3)
9