Hàm Python có đối tượng mã __code__
.Lấy hàm Python cho đối tượng mã
A sys.settrace
theo dõi frame
có đối tượng mã f_code
.
Đối với những cuộc gọi đến trình theo dõi đó là các hàm, làm cách nào tôi có thể nhận đối tượng hàm (và thành viên __annotation__
)?
Cho đến nay, bằng cách thử và sai, tôi có:
if hasattr(frame.f_globals.get(frame.f_code.co_name),"__annotations__"):
Điều này dường như làm việc cho các chức năng, nhưng không phải cho các chức năng đẳng cấp thành viên; tồi tệ hơn, nó gây nhầm lẫn với các hàm thành viên lớp với các hàm mức cao nhất của cùng một tên.
(. Tôi đang trên Python 3.2.3 (Xubuntu) Tôi thấy rằng Python 3.3 inspect
mô-đun có chức năng signature
, điều này sẽ trở lại với chú thích cho một đối tượng mã hoặc nó quá cần một đối tượng chức năng?)
'lĩnh vực function'' cái inspect.getframeinfo' tuple dường như là một chuỗi chứ không phải là một đối tượng hàm. Và cách tiếp cận gc có nhiều rủi ro? – Will
Tôi đã kết thúc bằng cách sử dụng gc.get_referrers (...) [0] – Will
Bạn có thể thêm một kiểm tra để xem func_code/__ code__ là đối tượng mã bạn muốn hiểu danh sách hay không. Điều này vẫn không thành công nếu bạn tạo nhiều hàm với các đóng khác nhau từ cùng một đối tượng mã, ví dụ với một người trang trí. Giả sử ta có thể so sánh các f_locals với các cell_contents của func_closure cho mỗi ... –