Tôi có một đối tượng lambda được tạo trong hàm này:Làm cách nào để ánh xạ các mục nhập func_closure thành các tên biến?
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
self.record(lambda s:
s.add_url_rule(rule, endpoint, view_func, **options))
Sử dụng func_closure
của đối tượng chức năng lambda tôi có thể truy cập vào phạm vi đóng cửa của hàm lambda:
(<cell at 0x3eb89f0: str object at 0x2fb4378>,
<cell at 0x3eb8a28: function object at 0x3cb3a28>,
<cell at 0x3eb8a60: str object at 0x3ebd090>,
<cell at 0x3eb8b08: dict object at 0x3016ec0>)
Một cái nhìn gần gũi hơn (tại thuộc tính cell_contents
của mỗi đối tượng cell
) hiển thị cho tôi điều này:
>>> [c.cell_contents for c in func.func_closure]
['categoryDisplay',
<function indico.web.flask.util.RHCategoryDisplay>,
'/<categId>/',
{}]
Đó la MBDA chức năng được tạo ra bởi cuộc gọi này:
add_url_rule('/<categId>/', 'categoryDisplay', rh_as_view(RHCategoryDisplay))
Như bạn thấy, thứ tự không phù hợp với trình tự lập luận của hàm hoặc thứ tự mà các đối số được sử dụng bên trong lambda. Trong khi tôi có thể dễ dàng tìm ra yếu tố nào là dựa trên loại/nội dung của nó, tôi muốn làm điều đó một cách rõ ràng hơn.
Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể liên kết nó với tên biến ban đầu của chúng (hoặc ít nhất là các vị trí trong trường hợp đối số hàm)?
Hình như các đối số từ khóa được thực hiện đầu tiên, rồi các vị trí, sau đó là tất cả. –
Đây có phải là thử nghiệm với Python 2 hoặc 3 không? –
Tôi đang sử dụng Python 2.7 nhưng nó cần hỗ trợ 2.6 và 2.7. Tôi không nghĩ rằng có bất kỳ thay đổi có liên quan giữa hai phiên bản mặc dù. – ThiefMaster