Mô-đun >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True3 cung cấp một số chức năng hữu ích để giúp lấy thông tin về các đối tượng trực tiếp như mô-đun, lớp, phương thức, hàm, truy nguyên, đối tượng khung và đối tượng mã. Ví dụ: nó có thể giúp bạn kiểm tra nội dung của một lớp, truy xuất mã nguồn của một phương thức, trích xuất và định dạng danh sách đối số cho một hàm hoặc lấy tất cả thông tin bạn cần để hiển thị truy nguyên chi tiết. Show
Có bốn loại dịch vụ chính được cung cấp bởi mô-đun này. kiểm tra kiểu, lấy mã nguồn, kiểm tra các lớp và chức năng cũng như kiểm tra ngăn xếp trình thông dịch Các loại và thành viên¶Hàm >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True5 truy xuất các thành viên của đối tượng như lớp hoặc mô-đun. Các hàm có tên bắt đầu bằng “is” chủ yếu được cung cấp dưới dạng các lựa chọn thuận tiện cho đối số thứ hai của >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True5. Chúng cũng giúp bạn xác định thời điểm bạn có thể mong đợi tìm thấy các thuộc tính đặc biệt sau (xem Các thuộc tính mô-đun liên quan đến nhập để biết các thuộc tính mô-đun). Loại Thuộc tính Sự miêu tả tầng lớp __doc__ chuỗi tài liệu __Tên__ tên mà lớp này đã được xác định __tên số lượng__ tên đủ điều kiện __mô-đun__ tên của mô-đun trong đó lớp này được định nghĩa phương pháp __doc__ chuỗi tài liệu __Tên__ tên mà phương pháp này đã được xác định __tên số lượng__ tên đủ điều kiện __func__ đối tượng hàm chứa việc thực hiện phương thức __bản thân__ trường hợp mà phương pháp này bị ràng buộc, hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 __mô-đun__ tên của mô-đun trong đó phương thức này được xác định hàm số __doc__ chuỗi tài liệu __Tên__ tên mà chức năng này đã được xác định __tên số lượng__ tên đủ điều kiện __mã số__ đối tượng mã chứa hàm đã biên dịch mã byte __mặc định__ bộ của bất kỳ giá trị mặc định nào cho tham số vị trí hoặc từ khóa __kwdefaults__ ánh xạ của bất kỳ giá trị mặc định nào cho các tham số chỉ từ khóa __globals__ không gian tên toàn cầu trong đó chức năng này được xác định __xây dựng__ không gian tên dựng sẵn __chú thích__ ánh xạ tên tham số thành chú thích; __mô-đun__ tên của mô-đun trong đó chức năng này được xác định tìm lại tb_frame đối tượng khung ở cấp độ này tb_lasti chỉ mục của lệnh được thử lần cuối trong mã byte tb_lineno số dòng hiện tại trong mã nguồn Python tb_next đối tượng truy nguyên bên trong tiếp theo (được gọi theo cấp độ này) khung f_back đối tượng khung bên ngoài tiếp theo (người gọi khung này) f_buildins không gian tên dựng sẵn được nhìn thấy bởi khung này f_code đối tượng mã đang được thực thi trong khung này f_globals không gian tên toàn cầu được nhìn thấy bởi khung này f_lasti chỉ mục của lệnh được thử lần cuối trong mã byte f_lineno số dòng hiện tại trong mã nguồn Python f_locals không gian tên cục bộ được nhìn thấy bởi khung này f_trace chức năng theo dõi cho khung này, hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 mã số co_argcount số lượng đối số (không bao gồm đối số chỉ từ khóa, * hoặc ** đối số) co_code chuỗi mã byte được biên dịch thô co_cellvars bộ tên của các biến ô (được tham chiếu bằng cách chứa phạm vi) co_consts bộ hằng số được sử dụng trong mã byte co_filename tên của tệp trong đó đối tượng mã này được tạo co_firstlineno số dòng đầu tiên trong mã nguồn Python co_flags bitmap của >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>0 cờ, đọc thêm tại đây co_lnotab ánh xạ được mã hóa của số dòng thành các chỉ số mã byte co_freevars bộ tên của các biến tự do (được tham chiếu thông qua bao đóng của hàm) co_posonlyargcount số đối số chỉ vị trí co_kwwonargcount số đối số chỉ từ khóa (không bao gồm ** arg) co_name tên mà đối tượng mã này đã được xác định co_qualname tên đủ điều kiện mà đối tượng mã này đã được xác định co_names bộ tên khác với đối số và hàm cục bộ co_nlocals số biến cục bộ co_stacksize yêu cầu không gian ngăn xếp máy ảo co_varnames bộ tên của các đối số và các biến cục bộ máy phát điện __Tên__ Tên __tên số lượng__ tên đủ điều kiện gi_frame khung gi_running máy phát điện có chạy không? gi_code mã số gi_yieldfrom đối tượng được lặp bởi >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>1, hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 công việc thường ngày __Tên__ Tên __tên số lượng__ tên đủ điều kiện cr_await đối tượng đang được chờ đợi, hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 cr_frame khung cr_running coroutine có đang chạy không? cr_code mã số cr_origin nơi coroutine được tạo ra, hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7. Xem >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>5 được xây dựng trong __doc__ chuỗi tài liệu __Tên__ tên gốc của hàm hoặc phương thức này __tên số lượng__ tên đủ điều kiện __bản thân__ trường hợp mà một phương thức bị ràng buộc, hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 Đã thay đổi trong phiên bản 3. 5. Thêm thuộc tính >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>7 và >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>8 vào bộ tạo. Thuộc tính >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>9 của các trình tạo hiện được đặt từ tên hàm, thay vì tên mã và giờ đây nó có thể được sửa đổi Đã thay đổi trong phiên bản 3. 7. Thêm thuộc tính >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True60 vào coroutines. Đã thay đổi trong phiên bản 3. 10. Thêm thuộc tính >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True61 vào hàm. kiểm tra. nhận thành viên(đối tượng[ , predicate])¶ Trả về tất cả các thành viên của một đối tượng trong danh sách >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True62 cặp được sắp xếp theo tên. Nếu đối số vị từ tùy chọn—sẽ được gọi với đối tượng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True63 của mỗi phần tử—được cung cấp, thì chỉ những phần tử mà vị từ trả về giá trị thực mới được đưa vào Ghi chú >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True5 sẽ chỉ trả về các thuộc tính lớp được xác định trong siêu dữ liệu khi đối số là một lớp và các thuộc tính đó đã được liệt kê trong >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True65 tùy chỉnh của siêu dữ liệukiểm tra. getmembers_static(đối tượng[ , predicate])¶ Trả về tất cả các thành viên của một đối tượng trong danh sách gồm các cặp >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True62 được sắp xếp theo tên mà không kích hoạt tra cứu động thông qua giao thức mô tả, __getattr__ hoặc __getattribute__. Tùy chọn, chỉ trả lại các thành viên đáp ứng một vị từ nhất định Ghi chú >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True67 có thể không truy xuất được tất cả các thành viên mà getmembers có thể tìm nạp (như các thuộc tính được tạo động) và có thể tìm thấy các thành viên mà getmembers không thể (như các bộ mô tả làm tăng AttributeError). Nó cũng có thể trả về các đối tượng mô tả thay vì các thành viên thể hiện trong một số trường hợp Mới trong phiên bản 3. 11 kiểm tra. getmodulename(đường dẫn) ¶Trả về tên của mô-đun được đặt tên theo đường dẫn tệp, không bao gồm tên của các gói kèm theo. Phần mở rộng tệp được kiểm tra đối với tất cả các mục trong >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True68. Nếu khớp, thành phần đường dẫn cuối cùng được trả về với phần mở rộng đã bị xóa. Mặt khác, >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 được trả về Lưu ý rằng hàm này chỉ trả về một tên có ý nghĩa cho các mô-đun Python thực - các đường dẫn có khả năng tham chiếu đến các gói Python sẽ vẫn trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 Đã thay đổi trong phiên bản 3. 3. Hàm này dựa trực tiếp vào >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True71. kiểm tra. ismodule(đối tượng) ¶ Trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là một mô-đunkiểm tra. lớp(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là một lớp, cho dù được tạo sẵn hay được tạo bằng mã Pythonkiểm tra. phương thức(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là một phương thức ràng buộc được viết bằng Pythonkiểm tra. hàm(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là một hàm Python, bao gồm các hàm được tạo bởi biểu thức lambda . kiểm tra. hàm phát sinh(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là hàm tạo Python Đã thay đổi trong phiên bản 3. 8. Các hàm được bọc trong >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True77 hiện trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu hàm được bọc là một hàm tạo Python. kiểm tra. trình tạo(đối tượng) ¶ Trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là trình tạokiểm tra. hàm iscoroutine(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là một hàm coroutine (một hàm được xác định bằng cú pháp >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True71). Mới trong phiên bản 3. 5 Đã thay đổi trong phiên bản 3. 8. Các hàm được bọc trong >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True77 hiện trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu hàm được bọc là một hàm coroutine . kiểm tra. hành trình(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là coroutine được tạo bởi hàm >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True71. Mới trong phiên bản 3. 5 kiểm tra. có thể chờ được(đối tượng) ¶Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng có thể được sử dụng trong biểu thức >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True77 Cũng có thể được sử dụng để phân biệt các coroutine dựa trên trình tạo với các trình tạo thông thường >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True4 Mới trong phiên bản 3. 5 kiểm tra. chức năng isasyncgen(đối tượng) ¶Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là một hàm trình tạo không đồng bộ , chẳng hạn. >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True Mới trong phiên bản 3. 6 Đã thay đổi trong phiên bản 3. 8. Các hàm được bọc trong >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True77 hiện trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu hàm được bọc là một hàm tạo không đồng bộ . kiểm tra. isasyncgen(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là một trình lặp trình tạo không đồng bộ được tạo bởi một trình tạo không đồng bộ function. Mới trong phiên bản 3. 6 kiểm tra. lỗi ngược(đối tượng) ¶Trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là truy nguyênkiểm tra. isframe(đối tượng) ¶ Trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là khungkiểm tra. mã(đối tượng) ¶ Trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là mãkiểm tra. được tạo sẵn(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là một hàm dựng sẵn hoặc một phương thức dựng sẵn bị ràng buộckiểm tra. ismethodwrapper(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu loại đối tượng là >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True57 Đây là các phiên bản của >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True57, chẳng hạn như >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True59, >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True80 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True81 Mới trong phiên bản 3. 11 kiểm tra. quy trình(đối tượng) ¶Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là hàm hoặc phương thức do người dùng định nghĩa hoặc tích hợp sẵnkiểm tra. trừu tượng(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là một lớp cơ sở trừu tượngkiểm tra. ismethoddescriptor(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là bộ mô tả phương thức, nhưng không trả về nếu >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True85, >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True86, >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True87 hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True88 là đúng Ví dụ, điều này đúng với >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True89. Một đối tượng vượt qua bài kiểm tra này có phương thức >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>80 nhưng không phải phương thức >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>81, ngoài ra, tập hợp các thuộc tính khác nhau. Thuộc tính >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>9 thường hợp lý và >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>83 thường là Các phương pháp được triển khai thông qua các bộ mô tả cũng vượt qua một trong các bài kiểm tra khác trả về >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>84 từ bài kiểm tra >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>85, đơn giản vì các bài kiểm tra khác hứa hẹn nhiều hơn – bạn có thể, e. g. , tin tưởng vào việc có thuộc tính >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>86 (vv) khi một đối tượng vượt qua >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True85kiểm tra. isdatadescriptor(đối tượng) ¶ Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là bộ mô tả dữ liệu Bộ mô tả dữ liệu có phương thức >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>89 hoặc >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>80. Ví dụ là các thuộc tính (được định nghĩa bằng Python), getset và thành viên. Hai cái sau được định nghĩa trong C và có nhiều thử nghiệm cụ thể hơn dành cho các loại đó, điều này rất mạnh mẽ trên các triển khai Python. Thông thường, bộ mô tả dữ liệu cũng sẽ có các thuộc tính >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>9 và >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>83 (thuộc tính, getset và thành viên có cả hai thuộc tính này), nhưng điều này không được đảm bảokiểm tra. isgetsetdescriptor(đối tượng) ¶ Trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là bộ mô tả getset Chi tiết triển khai CPython. getset là các thuộc tính được xác định trong các mô-đun mở rộng thông qua cấu trúc >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>84. Đối với việc triển khai Python không có các kiểu như vậy, phương thức này sẽ luôn trả về >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>84kiểm tra. ismemberdescriptor(đối tượng) ¶ Trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True72 nếu đối tượng là bộ mô tả thành viên Chi tiết triển khai CPython. Bộ mô tả thành viên là các thuộc tính được xác định trong các mô-đun mở rộng thông qua cấu trúc >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>87. Đối với việc triển khai Python không có các kiểu như vậy, phương thức này sẽ luôn trả về >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>84 Truy xuất mã nguồn¶kiểm tra. getdoc(đối tượng) ¶Nhận chuỗi tài liệu cho một đối tượng, được làm sạch bằng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>89. Nếu chuỗi tài liệu cho một đối tượng không được cung cấp và đối tượng là một lớp, một phương thức, một thuộc tính hoặc một bộ mô tả, hãy truy xuất chuỗi tài liệu từ hệ thống phân cấp thừa kế. Trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu chuỗi tài liệu không hợp lệ hoặc bị thiếu Đã thay đổi trong phiên bản 3. 5. Chuỗi tài liệu hiện được kế thừa nếu không bị ghi đè. kiểm tra. nhận bình luận(đối tượng) ¶Trả về một chuỗi bất kỳ dòng nhận xét nào ngay trước mã nguồn của đối tượng (đối với một lớp, hàm hoặc phương thức) hoặc ở đầu tệp nguồn Python (nếu đối tượng là một mô-đun). Nếu mã nguồn của đối tượng không có sẵn, hãy trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7. Điều này có thể xảy ra nếu đối tượng đã được xác định trong C hoặc shell tương táckiểm tra. getfile(đối tượng) ¶ Trả về tên của tệp (văn bản hoặc nhị phân) trong đó một đối tượng được xác định. Điều này sẽ thất bại với một >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True02 nếu đối tượng là một mô-đun, lớp hoặc chức năng tích hợp sẵnkiểm tra. getmodule(đối tượng) ¶ Thử đoán đối tượng được xác định trong mô-đun nào. Trả lại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu không xác định được mô-đunkiểm tra. getsourcefile(đối tượng) ¶ Trả lại tên của tệp nguồn Python trong đó một đối tượng được xác định hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu không thể xác định được cách nào để lấy nguồn. Điều này sẽ thất bại với một >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True02 nếu đối tượng là một mô-đun, lớp hoặc chức năng tích hợp sẵnkiểm tra. getsourcelines(đối tượng) ¶ Trả về danh sách các dòng nguồn và số dòng bắt đầu cho một đối tượng. Đối số có thể là một mô-đun, lớp, phương thức, hàm, truy nguyên, khung hoặc đối tượng mã. Mã nguồn được trả về dưới dạng danh sách các dòng tương ứng với đối tượng và số dòng cho biết dòng mã đầu tiên được tìm thấy ở đâu trong tệp nguồn gốc. Một >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True06 được nâng lên nếu không thể truy xuất mã nguồn Đã thay đổi trong phiên bản 3. 3. ______006 được nâng lên thay vì >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True08, hiện là bí danh của cái cũ. kiểm tra. lấy nguồn(đối tượng) ¶ Trả lại văn bản của mã nguồn cho một đối tượng. Đối số có thể là một mô-đun, lớp, phương thức, hàm, truy nguyên, khung hoặc đối tượng mã. Mã nguồn được trả về dưới dạng một chuỗi. Một >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True06 được nâng lên nếu không thể truy xuất mã nguồn Đã thay đổi trong phiên bản 3. 3. ______006 được nâng lên thay vì >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True08, hiện là bí danh của cái cũ. kiểm tra. cleandoc(doc) ¶ Dọn dẹp thụt đầu dòng khỏi các chuỗi tài liệu được thụt lề để xếp hàng với các khối mã Tất cả khoảng trắng hàng đầu được xóa khỏi dòng đầu tiên. Bất kỳ khoảng trắng hàng đầu nào có thể được xóa thống nhất từ dòng thứ hai trở đi đều bị xóa. Các dòng trống ở đầu và cuối sau đó sẽ bị xóa. Ngoài ra, tất cả các tab được mở rộng thành khoảng trắng Nội quan hóa các cuộc gọi với đối tượng Chữ ký¶Mới trong phiên bản 3. 3 Đối tượng Chữ ký đại diện cho chữ ký cuộc gọi của một đối tượng có thể gọi được và chú thích trả về của nó. Để truy xuất một đối tượng Chữ ký, hãy sử dụng hàm >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True12kiểm tra. chữ ký(có thể gọi được , *, follow_wrapped=True, globals=None, locals=None, eval_str=False)¶ Trả về một đối tượng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True13 cho >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True14 đã cho >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'> Chấp nhận một loạt các lệnh gọi Python, từ các hàm và lớp đơn giản đến các đối tượng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True77 Đối với các đối tượng được xác định trong mô-đun bằng cách sử dụng chú thích được xâu chuỗi ( >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True16), >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True12 sẽ cố gắng tự động hủy xâu chuỗi các chú thích bằng cách sử dụng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True18. Các tham số >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True19, >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True20 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True21 được chuyển vào >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True18 khi giải quyết các chú thích; Tăng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True24 nếu không thể cung cấp chữ ký và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True02 nếu loại đối tượng đó không được hỗ trợ. Ngoài ra, nếu các chú thích được xâu chuỗi và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True21 không sai, (các) lệnh gọi >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True27 để hủy xâu chuỗi các chú thích có khả năng gây ra bất kỳ loại ngoại lệ nào Dấu gạch chéo (/) trong chữ ký của hàm biểu thị rằng các tham số trước nó chỉ là vị trí. Để biết thêm thông tin, hãy xem mục Câu hỏi thường gặp về thông số chỉ vị trí . Mới trong phiên bản 3. 5. ______028 tham số. Vượt qua >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>84 để nhận chữ ký cụ thể của >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True14 ( >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True31 sẽ không được sử dụng để mở các vật phẩm có thể gọi được trang trí. ) Mới trong phiên bản 3. 10. ______032, >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True20, và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True21 tham số. Ghi chú Một số cuộc gọi có thể không được hướng nội trong một số triển khai nhất định của Python. Ví dụ: trong CPython, một số hàm tích hợp được định nghĩa trong C không cung cấp siêu dữ liệu về các đối số của chúng lớp kiểm tra. Chữ ký(tham số=Không . trống, *, return_annotation=Signature.empty) ¶Một đối tượng Chữ ký đại diện cho chữ ký cuộc gọi của một hàm và chú thích trả về của nó. Đối với mỗi tham số được hàm chấp nhận, nó lưu trữ một đối tượng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True35 trong bộ sưu tập >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True36 của nó Đối số tham số tùy chọn là một chuỗi các đối tượng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True35, được xác thực để kiểm tra xem không có tham số nào có tên trùng lặp và các tham số có theo đúng thứ tự không. e. trước tiên chỉ có vị trí, sau đó là vị trí hoặc từ khóa và các tham số có giá trị mặc định theo sau các tham số không có giá trị mặc định Đối số return_annotation tùy chọn, có thể là một đối tượng Python tùy ý, là chú thích “return” của đối tượng có thể gọi được Đối tượng chữ ký là bất biến. Sử dụng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True38 để tạo một bản sao đã sửa đổi Đã thay đổi trong phiên bản 3. 5. Đối tượng chữ ký có thể chọn và có thể băm. trống ¶Một điểm đánh dấu cấp lớp đặc biệt để chỉ định không có chú thích trả về tham số ¶Ánh xạ theo thứ tự tên của các tham số tới các đối tượng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True35 tương ứng. Các tham số xuất hiện theo thứ tự định nghĩa nghiêm ngặt, bao gồm các tham số chỉ từ khóa Đã thay đổi trong phiên bản 3. 7. Python chỉ đảm bảo rõ ràng rằng nó giữ nguyên thứ tự khai báo của các tham số chỉ từ khóa kể từ phiên bản 3. 7, mặc dù trên thực tế, thứ tự này luôn được giữ nguyên trong Python 3. return_annotation ¶Chú thích “return” cho callable. Nếu callable không có chú thích “return”, thuộc tính này được đặt thành >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True40ràng buộc(*args , **kwargs)¶ Tạo ánh xạ từ các đối số vị trí và từ khóa đến các tham số. Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True41 nếu >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True42 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True43 khớp với chữ ký hoặc tăng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True02bind_partial(*args , **kwargs)¶ Hoạt động tương tự như >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True45, nhưng cho phép lược bỏ một số đối số bắt buộc (bắt chước hành vi của >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True77. ) Trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True41 hoặc tăng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True02 nếu các đối số đã truyền không khớp với chữ kýreplace(*[, tham số][, return_annotation])¶ Tạo một phiên bản Chữ ký mới dựa trên phiên bản thay thế đã được gọi trên. Có thể chuyển các >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True36 và/hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True50 khác nhau để ghi đè các thuộc tính tương ứng của chữ ký cơ sở. Để xóa return_annotation khỏi Chữ ký đã sao chép, hãy chuyển vào >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True40 >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True6classmethod from_callable(obj , *, follow_wrapped=True, globalns=None, localns=None)¶ Trả về một đối tượng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True13 (hoặc lớp con của nó) cho một >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True53 có thể gọi được. Vượt qua >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True54 để nhận chữ ký của >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True53 mà không cần mở chuỗi >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True56 của nó. >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True57 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True58 sẽ được sử dụng làm không gian tên khi giải quyết các chú thích Phương pháp này đơn giản hóa việc phân lớp của >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True13 >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 Mới trong phiên bản 3. 5 Mới trong phiên bản 3. 10. ______057 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True58 tham số. lớp kiểm tra. Tham số(tên , loại . trống, *, default=Parameter.empty , chú thích=Tham số. trống) ¶ Các đối tượng tham số là bất biến. Thay vì sửa đổi một đối tượng Tham số, bạn có thể sử dụng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True62 để tạo một bản sao đã sửa đổi Đã thay đổi trong phiên bản 3. 5. Các đối tượng tham số có thể chọn và băm được. trống ¶Một điểm đánh dấu cấp lớp đặc biệt để chỉ định sự vắng mặt của các giá trị và chú thích mặc định tên ¶Tên của tham số dưới dạng chuỗi. Tên phải là một mã định danh Python hợp lệ Chi tiết triển khai CPython. CPython tạo các tên tham số ẩn có dạng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True63 trên các đối tượng mã được sử dụng để triển khai các biểu thức trình tạo và hiểu Đã thay đổi trong phiên bản 3. 6. Các tên tham số này được hiển thị bởi mô-đun này dưới dạng các tên như >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True64. mặc định ¶ Giá trị mặc định cho tham số. Nếu tham số không có giá trị mặc định, thuộc tính này được đặt thành >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True65chú thích ¶ Chú thích cho tham số. Nếu tham số không có chú thích, thuộc tính này được đặt thành >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True65tử tế ¶ Mô tả cách các giá trị đối số được liên kết với tham số. Các giá trị có thể (có thể truy cập qua >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True35, như >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True68) Tên Nghĩa POSITIONAL_ONLY Giá trị phải được cung cấp dưới dạng đối số vị trí. Các tham số chỉ vị trí là những tham số xuất hiện trước mục nhập >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True69 (nếu có) trong định nghĩa hàm Python POSITIONAL_OR_KEYWORD Giá trị có thể được cung cấp dưới dạng từ khóa hoặc đối số vị trí (đây là hành vi ràng buộc tiêu chuẩn cho các hàm được triển khai trong Python. ) VAR_POSITIONAL Một bộ đối số vị trí không bị ràng buộc với bất kỳ tham số nào khác. Điều này tương ứng với tham số >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True42 trong định nghĩa hàm Python KEYWORD_ONLY Giá trị phải được cung cấp dưới dạng đối số từ khóa. Tham số chỉ từ khóa là những tham số xuất hiện sau mục nhập >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True71 hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True42 trong định nghĩa hàm Python VAR_KEYWORD Một lệnh của các đối số từ khóa không bị ràng buộc với bất kỳ tham số nào khác. Điều này tương ứng với tham số >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True43 trong định nghĩa hàm Python Thí dụ. in tất cả các đối số chỉ từ khóa không có giá trị mặc định >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7tốt bụng. mô tả ¶ Mô tả một giá trị enum của Tham số. Tốt bụng Mới trong phiên bản 3. 8 Thí dụ. in tất cả các mô tả của đối số >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True5thay thế(*[, tên][, kind][, default][, annotation])¶ Tạo một phiên bản Tham số mới dựa trên phiên bản được thay thế đã được gọi trên. Để ghi đè thuộc tính >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True35, hãy chuyển đối số tương ứng. Để xóa giá trị mặc định hoặc/và chú thích khỏi Tham số, hãy vượt qua >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True65 >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True8 Đã thay đổi trong phiên bản 3. 4. Trong Python 3. 3 Các đối tượng tham số được phép đặt >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True76 thành >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True78 của chúng được đặt thành >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True79. Điều này không còn được phép. lớp kiểm tra. Đối số ràng buộc ¶ Kết quả của một cuộc gọi >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True45 hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True81. Giữ ánh xạ của các đối số tới các tham số của hàmđối số ¶ Ánh xạ có thể thay đổi tên của tham số thành giá trị của đối số. Chỉ chứa các đối số ràng buộc rõ ràng. Những thay đổi trong >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True82 sẽ phản ánh trong >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True83 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True84 Nên được sử dụng cùng với >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True85 cho bất kỳ mục đích xử lý đối số nào Ghi chú Các đối số mà >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True45 hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True81 dựa vào giá trị mặc định sẽ bị bỏ qua. Tuy nhiên, nếu cần, hãy sử dụng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True88 để thêm chúng Đã thay đổi trong phiên bản 3. 9. ______082 hiện thuộc loại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True90. Trước đây, nó thuộc loại >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True91. args ¶ Một bộ giá trị đối số vị trí. Được tính toán động từ thuộc tính >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True82kwargs ¶ Một lệnh của các giá trị đối số từ khóa. Được tính toán động từ thuộc tính >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True82chữ ký ¶ Tham chiếu đến đối tượng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True13 gốcapply_defaults() ¶ Đặt giá trị mặc định cho các đối số bị thiếu Đối với các đối số vị trí biến (_______042), mặc định là một bộ trống Đối với các đối số từ khóa biến ( >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True43), mặc định là một lệnh trống >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>8 Mới trong phiên bản 3. 5 Các thuộc tính >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True83 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True84 có thể được sử dụng để gọi các hàm >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>8 Xem thêm PEP 362 - Đối tượng chữ ký chức năngThông số kỹ thuật chi tiết, chi tiết triển khai và ví dụ Lớp và hàm¶kiểm tra. getclasstree(các lớp , duy nhất=False)¶Sắp xếp danh sách các lớp đã cho thành một hệ thống phân cấp các danh sách lồng nhau. Khi một danh sách lồng nhau xuất hiện, nó chứa các lớp bắt nguồn từ lớp có mục nhập ngay trước danh sách. Mỗi mục là 2-bộ chứa một lớp và một bộ các lớp cơ sở của nó. Nếu đối số duy nhất là đúng, chính xác một mục xuất hiện trong cấu trúc được trả về cho mỗi lớp trong danh sách đã cho. Nếu không, các lớp sử dụng nhiều kế thừa và lớp con của chúng sẽ xuất hiện nhiều lần kiểm tra. getfullargspec(func) ¶Lấy tên và giá trị mặc định của các tham số của hàm Python. Một tuple có tên được trả về. >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True99 args là danh sách các tên tham số vị trí. varargs là tên của tham số >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True71 hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu đối số vị trí tùy ý không được chấp nhận. varkw là tên của tham số >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>02 hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu đối số từ khóa tùy ý không được chấp nhận. giá trị mặc định là n-tuple giá trị đối số mặc định tương ứng với n tham số vị trí cuối cùng hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu không có giá trị mặc định nào được xác định. kwonlyargs là danh sách các tên tham số chỉ có từ khóa theo thứ tự khai báo. kwOnlydefaults là tên tham số ánh xạ từ điển từ kwonlyargs sang giá trị mặc định được sử dụng nếu không có đối số nào được cung cấp. chú thích là tên tham số ánh xạ từ điển thành chú thích. Phím đặc biệt >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True8 dùng để khai báo chú giải giá trị hàm trả về (nếu có) Lưu ý rằng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True12 và Đối tượng chữ ký cung cấp API được đề xuất để xem xét nội tâm có thể gọi được và hỗ trợ các hành vi bổ sung (như đối số chỉ vị trí) . Chức năng này được giữ lại chủ yếu để sử dụng trong mã cần duy trì khả năng tương thích với API mô-đun Python 2 >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True3. Đã thay đổi trong phiên bản 3. 4. Hàm này hiện dựa trên >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True12, nhưng vẫn bỏ qua các thuộc tính của >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True56 và bao gồm tham số đầu tiên đã được ràng buộc trong đầu ra chữ ký cho các phương thức bị ràng buộc. Đã thay đổi trong phiên bản 3. 6. Phương pháp này trước đây đã được ghi nhận là không dùng nữa để thay thế cho >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True12 trong Python 3. 5, nhưng quyết định đó đã bị đảo ngược để khôi phục giao diện tiêu chuẩn được hỗ trợ rõ ràng cho mã Python 2/3 nguồn đơn di chuyển khỏi API >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>11 cũ. Đã thay đổi trong phiên bản 3. 7. Python chỉ đảm bảo rõ ràng rằng nó giữ nguyên thứ tự khai báo của các tham số chỉ từ khóa kể từ phiên bản 3. 7, mặc dù trên thực tế, thứ tự này luôn được giữ nguyên trong Python 3. kiểm tra. getargvalues(frame) ¶Nhận thông tin về các đối số được truyền vào một khung cụ thể. Một tuple được đặt tên >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>12 được trả về. args là một danh sách các tên đối số. varargs và từ khóa là tên của các đối số >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True71 và >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>02 hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7. người dân địa phương là từ điển người dân địa phương của khung đã cho. Ghi chú Chức năng này vô tình được đánh dấu là không dùng nữa trong Python 3. 5 kiểm tra. giá trị định dạng(args[ , varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue])¶Định dạng một thông số đối số đẹp từ bốn giá trị được trả về bởi >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>16. Các đối số định dạng* là các hàm định dạng tùy chọn tương ứng được gọi để biến tên và giá trị thành chuỗi Ghi chú Chức năng này vô tình được đánh dấu là không dùng nữa trong Python 3. 5 kiểm tra. getmro(cls) ¶Trả về một bộ các lớp cơ sở của lớp cls, bao gồm cả cls, theo thứ tự phân giải phương thức. Không có lớp nào xuất hiện nhiều hơn một lần trong bộ dữ liệu này. Lưu ý rằng thứ tự giải quyết phương thức phụ thuộc vào loại của cls. Trừ khi một siêu dữ liệu do người dùng định nghĩa rất đặc biệt được sử dụng, cls sẽ là phần tử đầu tiên của bộ dữ liệu kiểm tra. getcallargs(func , /, *args, **kwds)¶Liên kết các đối số và kwds với tên đối số của hàm Python hoặc phương thức func, như thể nó được gọi cùng với chúng. Đối với các phương thức liên kết, cũng liên kết đối số đầu tiên (thường được đặt tên là >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>17) với thể hiện được liên kết. Một lệnh được trả về, ánh xạ tên đối số (bao gồm tên của đối số >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True71 và >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>02, nếu có) với giá trị của chúng từ args và kwds. Trong trường hợp gọi func không chính xác, tôi. e. bất cứ khi nào >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>20 đưa ra một ngoại lệ do chữ ký không tương thích, một ngoại lệ cùng loại và thông báo giống hoặc tương tự sẽ được đưa ra. Ví dụ >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True0 Mới trong phiên bản 3. 2 Không dùng nữa kể từ phiên bản 3. 5. Sử dụng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True45 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True81 thay thế. kiểm tra. getclosurevars(func) ¶ Lấy ánh xạ của các tham chiếu tên bên ngoài trong hàm Python hoặc phương thức func tới các giá trị hiện tại của chúng. Một tuple được đặt tên >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>23 được trả về. nonlocals ánh xạ các tên được tham chiếu tới các biến đóng từ vựng, toàn cầu tới toàn cục mô-đun của hàm và nội trang tới nội trang có thể nhìn thấy từ thân hàm. không liên kết là tập hợp các tên được tham chiếu trong hàm hoàn toàn không thể giải quyết được với các toàn cầu và nội dung mô-đun hiện tại. >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True02 được nâng lên nếu func không phải là hàm hoặc phương thức Python Mới trong phiên bản 3. 3 kiểm tra. mở gói(chức năng , *, stop=None)¶Lấy đối tượng được bao bọc bởi func. Nó tuân theo chuỗi thuộc tính >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True56 trả về đối tượng cuối cùng trong chuỗi stop là một cuộc gọi lại tùy chọn chấp nhận một đối tượng trong chuỗi trình bao bọc làm đối số duy nhất của nó cho phép kết thúc quá trình hủy gói sớm nếu cuộc gọi lại trả về một giá trị thực. Nếu cuộc gọi lại không bao giờ trả về giá trị thực, đối tượng cuối cùng trong chuỗi sẽ được trả về như bình thường. Ví dụ: >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True12 sử dụng điều này để dừng mở gói nếu bất kỳ đối tượng nào trong chuỗi có thuộc tính >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>27 được xác định >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True24 được nâng lên nếu gặp chu trình Mới trong phiên bản 3. 4 kiểm tra. get_annotations(obj , *, globals=None, locals=None, eval_str=False)¶Tính toán các chú thích dict cho một đối tượng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True53 có thể là một lớp, lớp hoặc mô-đun có thể gọi được. Truyền vào một đối tượng thuộc bất kỳ loại nào khác làm tăng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True02 Trả về một lệnh. >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>31 trả về một lệnh mới mỗi khi nó được gọi; Chức năng này xử lý một số chi tiết cho bạn
>>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True21 kiểm soát xem các giá trị của loại >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>33 có được thay thế hay không bằng kết quả của việc gọi >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True27 trên các giá trị đó
>>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True32 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True20 được chuyển cho >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True27; . Nếu >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True32 hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True20 là >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7, hàm này có thể thay thế giá trị đó bằng giá trị mặc định theo ngữ cảnh cụ thể, tùy thuộc vào >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>55
Gọi >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>44 là phương pháp hay nhất để truy cập chính tả chú thích của bất kỳ đối tượng nào. Xem Các phương pháp hay nhất về chú thích để biết thêm thông tin về các phương pháp hay nhất về chú thích. Mới trong phiên bản 3. 10 Ngăn thông dịch¶Một số hàm sau trả về đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70. Để có khả năng tương thích ngược, các đối tượng này cho phép các hoạt động giống như bộ trên tất cả các thuộc tính ngoại trừ >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>71. Hành vi này được coi là không dùng nữa và có thể bị xóa trong tương lailớp kiểm tra. FrameInfo ¶ khung ¶ Đối tượng frame mà bản ghi tương ứng. tên tệp ¶Tên tệp được liên kết với mã đang được thực thi bởi khung mà bản ghi này tương ứng với lineno ¶Số dòng của dòng hiện tại được liên kết với mã đang được thực thi bởi khung mà bản ghi này tương ứng với chức năng ¶Tên chức năng đang được thực thi bởi khung bản ghi này tương ứng với code_context ¶Danh sách các dòng ngữ cảnh từ mã nguồn đang được thực thi bởi khung mà bản ghi này tương ứng với chỉ mục ¶Chỉ mục của dòng hiện tại đang được thực thi trong danh sách >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>72vị trí ¶ Một đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>73 chứa số dòng bắt đầu, số dòng kết thúc, phần bù cột bắt đầu và phần bù cột kết thúc được liên kết với lệnh đang được thực thi bởi khung mà bản ghi này tương ứng với Đã thay đổi trong phiên bản 3. 5. Trả về một bộ có tên thay vì một >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>74. Đã thay đổi trong phiên bản 3. 11. >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70 hiện là một thể hiện của lớp (tương thích ngược với bộ có tên trước đó). lớp kiểm tra. Truy nguyên ¶ tên tệp ¶ Tên tệp được liên kết với mã đang được thực thi bởi khung truy nguyên này tương ứng với lineno ¶Số dòng của dòng hiện tại được liên kết với mã đang được thực thi bởi khung mà lần theo dõi này tương ứng với chức năng ¶Tên chức năng đang được thực thi bởi khung truy nguyên này tương ứng với code_context ¶Danh sách các dòng ngữ cảnh từ mã nguồn đang được thực thi bởi khung mà lần theo dõi này tương ứng với chỉ mục ¶Chỉ mục của dòng hiện tại đang được thực thi trong danh sách >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>72vị trí ¶ Một đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>73 chứa số dòng bắt đầu, số dòng kết thúc, phần bù cột bắt đầu và phần bù cột kết thúc được liên kết với lệnh đang được thực thi bởi khung mà lần truy nguyên này tương ứng với Đã thay đổi trong phiên bản 3. 11. ______678 hiện là một thể hiện của lớp (tương thích ngược với bộ có tên trước đó). Ghi chú Giữ các tham chiếu đến các đối tượng khung, như được tìm thấy trong phần tử đầu tiên của khung ghi lại các hàm này, có thể khiến chương trình của bạn tạo các chu kỳ tham chiếu. Khi một chu trình tham chiếu đã được tạo, tuổi thọ của tất cả các đối tượng có thể được truy cập từ các đối tượng hình thành chu trình có thể dài hơn nhiều ngay cả khi trình phát hiện chu trình tùy chọn của Python được bật. Nếu các chu kỳ như vậy phải được tạo, điều quan trọng là phải đảm bảo chúng bị phá vỡ một cách rõ ràng để tránh việc phá hủy các đối tượng bị trì hoãn và tăng mức tiêu thụ bộ nhớ xảy ra Mặc dù trình phát hiện chu trình sẽ bắt được những thứ này, nhưng việc phá hủy khung (và các biến cục bộ) có thể được xác định bằng cách loại bỏ chu trình trong mệnh đề >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>79. Điều này cũng quan trọng nếu trình phát hiện chu kỳ bị tắt khi Python được biên dịch hoặc sử dụng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>80. Ví dụ >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True1 Nếu bạn muốn giữ lại khung xung quanh (ví dụ: để in truy nguyên sau này), bạn cũng có thể ngắt các chu kỳ tham chiếu bằng cách sử dụng phương pháp >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>81 Đối số ngữ cảnh tùy chọn được hỗ trợ bởi hầu hết các hàm này chỉ định số lượng dòng ngữ cảnh sẽ trả về, được căn giữa xung quanh dòng hiện tại kiểm tra. getframeinfo(khung , bối cảnh=1)¶Nhận thông tin về một khung hoặc đối tượng truy nguyên. Một đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>78 được trả lại Đã thay đổi trong phiên bản 3. 11. Một đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>78 được trả về thay vì một bộ có tên. kiểm tra. getouterframes(frame , bối cảnh=1)¶ Nhận danh sách các đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70 cho một khung và tất cả các khung bên ngoài. Các khung này đại diện cho các cuộc gọi dẫn đến việc tạo khung. Mục đầu tiên trong danh sách trả về đại diện cho khung; Đã thay đổi trong phiên bản 3. 5. Một danh sách các bộ dữ liệu được đặt tên >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>85 được trả về. Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70 được trả về. kiểm tra. getinnerframes(truy ngược , bối cảnh=1)¶ Nhận danh sách các đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70 cho khung truy nguyên và tất cả các khung bên trong. Các khung này đại diện cho các cuộc gọi được thực hiện do kết quả của khung. Mục đầu tiên trong danh sách đại diện cho truy xuất nguồn gốc; Đã thay đổi trong phiên bản 3. 5. Một danh sách các bộ dữ liệu được đặt tên >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>85 được trả về. Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70 được trả về. kiểm tra. khung hình hiện tại() ¶ Trả lại đối tượng khung cho khung ngăn xếp của người gọi Chi tiết triển khai CPython. Chức năng này dựa trên hỗ trợ khung ngăn xếp Python trong trình thông dịch, không được đảm bảo tồn tại trong tất cả các triển khai của Python. Nếu chạy trong một triển khai không có hỗ trợ khung ngăn xếp Python, hàm này trả về >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True7kiểm tra. ngăn xếp(bối cảnh=1)¶ Trả về danh sách các đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70 cho ngăn xếp của người gọi. Mục đầu tiên trong danh sách được trả về đại diện cho người gọi; Đã thay đổi trong phiên bản 3. 5. Một danh sách các bộ dữ liệu được đặt tên >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>85 được trả về. Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70 được trả về. kiểm tra. dấu vết(bối cảnh=1)¶ Trả về danh sách các đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70 cho ngăn xếp giữa khung hiện tại và khung trong đó một ngoại lệ hiện đang được xử lý đã được đưa ra trong. Mục đầu tiên trong danh sách đại diện cho người gọi; Đã thay đổi trong phiên bản 3. 5. Một danh sách các bộ dữ liệu được đặt tên >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>85 được trả về. Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>70 được trả về. Tìm nạp thuộc tính tĩnh¶Cả >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>37 và >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>98 đều có thể kích hoạt thực thi mã khi tìm nạp hoặc kiểm tra sự tồn tại của các thuộc tính. Các mô tả, giống như các thuộc tính, sẽ được gọi và >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>99 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True600 có thể được gọi Đối với những trường hợp bạn muốn xem xét nội tâm thụ động, chẳng hạn như các công cụ tài liệu, điều này có thể gây bất tiện. >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True601 có cùng chữ ký với >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>37 nhưng tránh thực thi mã khi tìm nạp thuộc tínhkiểm tra. getattr_static(obj , attr, default=None)¶ Truy xuất các thuộc tính mà không kích hoạt tra cứu động thông qua giao thức mô tả, >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>99 hoặc >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True600 Ghi chú. chức năng này có thể không truy xuất được tất cả các thuộc tính mà getattr có thể tìm nạp (như các thuộc tính được tạo động) và có thể tìm thấy các thuộc tính mà getattr không thể (như các bộ mô tả làm tăng AttributeError). Nó cũng có thể trả về các đối tượng mô tả thay vì các thành viên thể hiện Nếu phiên bản >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True605 bị che khuất bởi một thành viên khác (ví dụ: một thuộc tính) thì chức năng này sẽ không thể tìm thấy các thành viên của phiên bản Mới trong phiên bản 3. 2 >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True601 không giải quyết các bộ mô tả, ví dụ như bộ mô tả vị trí hoặc bộ mô tả getset trên các đối tượng được triển khai trong C. Đối tượng mô tả được trả về thay vì thuộc tính cơ bản Bạn có thể xử lý chúng bằng mã như sau. Lưu ý rằng đối với các bộ mô tả getset tùy ý, việc gọi chúng có thể kích hoạt thực thi mã >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True2 Trạng thái hiện tại của Trình tạo và Coroutine¶Khi triển khai bộ lập lịch coroutine và cho các ứng dụng nâng cao khác của trình tạo, sẽ rất hữu ích khi xác định xem trình tạo hiện đang thực thi, đang chờ để bắt đầu hoặc tiếp tục hoặc thực thi hay đã kết thúc. >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True607 cho phép xác định trạng thái hiện tại của máy phát một cách dễ dàngkiểm tra. getgeneratorstate(trình tạo) ¶ Nhận trạng thái hiện tại của trình tạo-iterator Các trạng thái có thể là
Mới trong phiên bản 3. 2 kiểm tra. getcoroutinestate(coroutine) ¶Nhận trạng thái hiện tại của một đối tượng coroutine. Chức năng này nhằm mục đích sử dụng với các đối tượng coroutine được tạo bởi các hàm >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True71, nhưng sẽ chấp nhận bất kỳ đối tượng giống như coroutine nào có thuộc tính >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True609 và >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True610Các trạng thái có thể là
Mới trong phiên bản 3. 5 Trạng thái bên trong hiện tại của trình tạo cũng có thể được truy vấn. Điều này chủ yếu hữu ích cho mục đích thử nghiệm, để đảm bảo rằng trạng thái nội bộ đang được cập nhật như mong đợi kiểm tra. getgeneratorlocals(trình tạo) ¶Lấy ánh xạ của các biến cục bộ trực tiếp trong trình tạo tới các giá trị hiện tại của chúng. Một từ điển được trả về ánh xạ từ tên biến thành giá trị. Điều này tương đương với việc gọi >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True611 trong phần thân của trình tạo và áp dụng tất cả các cảnh báo tương tự Nếu trình tạo là trình tạo không có khung hiện được liên kết, thì một từ điển trống sẽ được trả về. >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True02 được nâng lên nếu trình tạo không phải là đối tượng trình tạo Python. Chi tiết triển khai CPython. Hàm này dựa vào trình tạo hiển thị khung ngăn xếp Python để xem xét nội tâm, điều này không được đảm bảo là trường hợp trong tất cả các triển khai của Python. Trong những trường hợp như vậy, chức năng này sẽ luôn trả về một từ điển trống Mới trong phiên bản 3. 3 kiểm tra. getcoroutinelocals(coroutine) ¶Chức năng này tương tự như >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True613, nhưng hoạt động cho các đối tượng coroutine được tạo bởi các chức năng >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True71 Mới trong phiên bản 3. 5 Đối tượng mã Cờ bit¶Các đối tượng mã Python có thuộc tính >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True615, là bản đồ bit của các cờ saukiểm tra. CO_OPTIMIZED ¶ Đối tượng mã được tối ưu hóa, sử dụng địa phương nhanh kiểm tra. CO_NEWLOCALS ¶Nếu được đặt, một lệnh mới sẽ được tạo cho khung >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True616 khi đối tượng mã được thực thikiểm tra. CO_VAARGS ¶ Đối tượng mã có tham số vị trí thay đổi (giống như ____042) kiểm tra. CO_VARKEYWORDS ¶Đối tượng mã có tham số từ khóa biến ( >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True43-like)kiểm tra. CO_NESTED ¶ Cờ được đặt khi đối tượng mã là một hàm lồng nhau kiểm tra. CO_GENERATOR ¶Cờ được đặt khi đối tượng mã là hàm tạo, tôi. e. một đối tượng trình tạo được trả về khi đối tượng mã được thực thi kiểm tra. CO_COROUTINE ¶Cờ được đặt khi đối tượng mã là một hàm coroutine. Khi đối tượng mã được thực thi, nó trả về một đối tượng coroutine. Xem PEP 492 để biết thêm chi tiết Mới trong phiên bản 3. 5 kiểm tra. CO_ITERABLE_COROUTINE ¶Cờ được sử dụng để chuyển đổi trình tạo thành coroutines dựa trên trình tạo. Các đối tượng trình tạo có cờ này có thể được sử dụng trong biểu thức >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True77 và có thể >>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): .. pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>1 đối tượng coroutine. Xem PEP 492 để biết thêm chi tiết Mới trong phiên bản 3. 5 kiểm tra. CO_ASYNC_GENERATOR ¶Cờ được đặt khi đối tượng mã là hàm tạo không đồng bộ. Khi đối tượng mã được thực thi, nó trả về một đối tượng trình tạo không đồng bộ. Xem PEP 525 để biết thêm chi tiết Mới trong phiên bản 3. 6 Ghi chú Các cờ dành riêng cho CPython và có thể không được xác định trong các triển khai Python khác. Hơn nữa, các cờ là một chi tiết triển khai và có thể bị xóa hoặc không dùng nữa trong các bản phát hành Python trong tương lai. Bạn nên sử dụng các API công khai từ mô-đun >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True3 cho mọi nhu cầu xem xét nội tâm Giao diện dòng lệnh¶Mô-đun >>> async def agen(): .. yield 1 ... >>> inspect.isasyncgenfunction(agen) True3 cũng cung cấp khả năng xem xét nội tâm cơ bản từ dòng lệnh Theo mặc định, chấp nhận tên của mô-đun và in mã nguồn của mô-đun đó. Thay vào đó, một lớp hoặc chức năng trong mô-đun có thể được in bằng cách thêm dấu hai chấm và tên đủ điều kiện của đối tượng đích Chúng ta có thể ghi đè lên các biến trong Python không?Quy tắc gán biến
. 2. Gán như y = 'bye' ở trên, trong đó biến có một con trỏ hiện có trong đó, sẽ ghi đè con trỏ hiện có bằng con trỏ mới .
Ghi đè có nghĩa là gì trong Python?Đầu ra. Chương trình. Để ghi đè lên một tệp trong Python Ghi đè lên một tệp. Thay thế nội dung cũ của dữ liệu .
Điều gì xảy ra khi bạn ghi đè lên một biến trong Python?Python không sao chép giá trị ban đầu của biến trước khi lưu biến bị ghi đè . Có thể bạn đang thấy hiệu ứng của các bộ đệm khác nhau khiến chương trình bị chậm lại. Hoặc nếu bạn đang tạo các đối tượng, một trình thu gom rác sẽ được gọi để xóa các đối tượng bạn đã tạo không còn được tham chiếu nữa.
Bạn có thể ghi đè các hàm tích hợp trong Python không?Trừ khi bạn có lý do đặc biệt, còn không bạn không nên ghi đè lên các hàm này hay gán giá trị cho một biến có cùng tên với biến . Ghi đè một tích hợp sẵn có thể có tác dụng phụ không mong muốn hoặc có thể gây ra lỗi thời gian chạy. Các nhà phát triển Python thường sử dụng 'nguyên trạng' tích hợp sẵn. |