2013-11-27 34 views
9

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ì?

Trả lời

6

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()) 
13

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