Xin lưu ý rằng các câu trả lời được chấp nhận chỉ hoạt động nếu lambda được đưa ra trên một dòng riêng biệt. Nếu bạn chuyển nó dưới dạng đối số cho hàm và muốn lấy mã của lambda làm đối tượng, thì vấn đề sẽ hơi phức tạp vì inspect
sẽ cung cấp cho bạn toàn bộ dòng.
Ví dụ: xem xét một tệp test.py
:
import inspect
def main():
x, f = 3, lambda a: a + 1
print(inspect.getsource(f))
if __name__ == "__main__":
main()
Thực hiện nó mang lại cho bạn (nhớ sự cố gắng!):
x, f = 3, lambda a: a + 1
Để lấy mã nguồn của lambda, theo tôi, cách tốt nhất của bạn là phân tích lại toàn bộ tệp nguồn (bằng cách sử dụng f.__code__.co_filename
) và khớp với nút lambda AST theo số dòng và ngữ cảnh của nó.
Chúng tôi đã phải làm một cách chính xác rằng trong thư viện thiết kế theo hợp đồng của chúng tôi icontract kể từ khi chúng tôi phải phân tích các chức năng lambda chúng tôi vượt qua trong như các đối số để trang trí. Đó là quá nhiều mã để dán ở đây, vì vậy hãy xem việc thực hiện chức năng này .