Một trong những tính năng mạnh mẽ nhất của Python là mọi thứ đều là một đối tượng, bao gồm cả các chức năng. Các chức năng trong Python là các đối tượng hạng nhất.first-class objects. Điều này có nghĩa là, các chức năng trong Python: Mã nguồn: lib/expect.py Lib/inspect.py Mô -đun >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True4 cung cấp một số chức năng hữu ích để giúp có được thông tin về các đối tượng trực tiếp như mô -đun, lớp, phương thức, chức năng, dấu vết, đố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 nhận tất cả thông tin bạn cần để hiển thị một dấu vết chi tiết. Có bốn loại dịch vụ chính được cung cấp bởi mô -đun này: kiểm tra loại, nhận mã nguồn, kiểm tra các lớp và chức năng và kiểm tra ngăn xếp trình thông dịch. Các loại và thành viênHàm >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True5 truy xuất các thành viên của một đối tượng như lớp hoặc mô -đun. Các chức năng có tên bắt đầu bằng cách mà là chủ yếu được cung cấp dưới dạng lựa chọn thuận tiện cho đối số thứ hai là >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True5. Họ cũng giúp bạn xác định khi nào bạn có thể mong đợi tìm thấy các thuộc tính đặc biệt sau:
Tên của mô -đun trong đó lớp này được xác địnhAdd >>> 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 and >>> 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 attributes to generators. phương pháp Tên mà phương pháp này đã được xác địnhAdd >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"0 attribute to coroutines. đối tượng chức năng chứa thực hiện phương thứcAdd >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"1 attribute to functions.ví dụ mà phương thức này bị ràng buộc hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7(object[, predicate])¶ Trả về tất cả các thành viên của một đối tượng trong danh sách các cặp >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"4 được sắp xếp theo tên. Nếu đối số vị ngữ tùy chọn, sẽ được gọi với đối tượng >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"5 của mỗi thành viên, được cung cấp, chỉ có các thành viên mà vị ngữ trả về một giá trị thực được bao gồm. 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 metaclass khi đối số là một lớp và các thuộc tính đó đã được liệt kê trong tùy chỉnh Metaclass. ________ 32 ________ 39 (đường dẫn) ¶(path)¶ Trả về tên của mô -đun được đặt tên bởi đường dẫn tệp, mà 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 class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)0. Nếu nó phù hợ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. Nếu không, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 được trả lại. Lưu ý rằng chức năng này chỉ trả về một tên có ý nghĩa cho các mô -đun Python thực tế - các đường dẫn có khả năng đề cập đến các gói Python vẫn sẽ trả về >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7. Đã thay đổi trong phiên bản 3.3: Hàm dựa trên class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)3. ________ 32 ________ 45 (đối tượng) ¶(object)¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 nếu đối tượng là một mô -đun. ________ 32 ________ 48 (đối tượng) ¶(object)¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là một lớp, cho dù được tích hợp hoặc tạo trong mã Python. ________ 32 ________ 51 (đối tượng) ¶(object)¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là một phương thức ràng buộc được viết bằng Python. ________ 32 ________ 54 (đối tượng) ¶(object)¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là hàm Python, bao gồm các hàm được tạo bởi biểu thức Lambda.lambda expression. ________ 32 ________ 57 (đối tượng) ¶(object)¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là hàm tạo Python. Đã thay đổi trong phiên bản 3.8: Các chức năng được gói trong >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... if (param.kind == param.KEYWORD_ONLY and ... param.default is param.empty): ... print('Parameter:', param) Parameter: c9 now return class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 if the wrapped function is a Python generator function. ________ 32 ________ 62 (đối tượng) ¶(object)¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 nếu đối tượng là một trình tạo. ________ 32 ________ 65 (đối tượng) ¶(object)¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 nếu đối tượng là hàm coroutine (hàm được xác định với cú pháp >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only7).coroutine function (a function defined with an >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only7 syntax). Mới trong phiên bản 3.5. ________ 32 ________ 69 (đối tượng) ¶(object)¶Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là một coroutine được tạo bởi hàm >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only7.coroutine created by an >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only7 function. Mới trong phiên bản 3.5. ________ 32 ________ 69 (đối tượng) ¶(object)¶Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là một coroutine được tạo bởi hàm >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only7. ________ 32 ________ 73 (đối tượng) ¶ def gen(): yield @types.coroutine def gen_coro(): yield assert not isawaitable(gen()) assert isawaitable(gen_coro()) Mới trong phiên bản 3.5. ________ 32 ________ 69 (đối tượng) ¶(object)¶Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là một coroutine được tạo bởi hàm >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only7.asynchronous generator function, for example: >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True ________ 32 ________ 73 (đối tượng) ¶ Trả vềclass MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng có thể được sử dụng trong biểu thức >>> from inspect import Parameter >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) >>> str(param) 'foo=42' >>> str(param.replace()) # Will create a shallow copy of 'param' 'foo=42' >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo:'spam'"5.(object)¶ Cũng có thể được sử dụng để phân biệt các coroutin dựa trên máy phát điện với các trình tạo thông thường:asynchronous generator iterator created by an asynchronous generator function. ________ 32 ________ 73 (đối tượng) ¶ Trả vềclass MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng có thể được sử dụng trong biểu thức >>> from inspect import Parameter >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) >>> str(param) 'foo=42' >>> str(param.replace()) # Will create a shallow copy of 'param' 'foo=42' >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo:'spam'"5.(object)¶ Cũng có thể được sử dụng để phân biệt các coroutin dựa trên máy phát điện với các trình tạo thông thường: ________ 32 ________ 77 (đối tượng) ¶(object)¶Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là hàm tạo không đồng bộ, ví dụ::Mới trong phiên bản 3.6.(object)¶ ________ 32 ________ 80 (đối tượng) ¶ Trả vềclass MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là một trình lặp máy phát không đồng bộ được tạo bởi hàm tạo không đồng bộ.(object)¶ ________ 32 ________ 83 (đối tượng) ¶ Trả vềclass MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 nếu đối tượng là một dấu vết.(object)¶ ________ 32 ________ 86 (đối tượng) ¶ Trả vềclass MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 nếu đối tượng là một khung.(object)¶ ________ 32 ________ 89 (đối tượng) ¶ Trả vềclass MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 nếu đối tượng là mã.(object)¶ ________ 32 ________ 92 (đối tượng) ¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là hàm tích hợp hoặc phương thức tích hợp ràng buộc. ________ 32 ________ 95 (đối tượng) ¶ Trả vềclass MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là chức năng hoặc phương thức được định nghĩa bởi người dùng hoặc tích hợp.(object)¶ ________ 32 ________ 98 (đối tượng) ¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là một lớp cơ sở trừu tượng. ________ 32 ________ 101 (đối tượng) ¶(object)¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là một bộ mô tả phương thức, nhưng không phải nếu >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True03, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True04, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True05 hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True06 là đúng. Điều này, ví dụ, đúng với >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True26 structures. For Python implementations without such types, this method will always return >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True12.________ 32 ________ 129 (đối tượng) ¶(object)¶ Trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)6 Nếu đối tượng là mô tả thành viên. Chi tiết triển khai CPYThon: 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ác cấu trúc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True31 structures. For Python implementations without such types, this method will always return >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True12. Lấy mã nguồn________ 32 ________ 134 (đối tượng) ¶(object)¶Nhận chuỗi tài liệu cho một đối tượng, được làm sạch với >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True35. 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, phương thức, thuộc tính hoặc bộ mô tả, hãy truy xuất chuỗi tài liệu từ hệ thống phân cấp kế thừa. Trả về >>> 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: Các chuỗi tài liệu hiện được kế thừa nếu không được ghi đè.Documentation strings are now inherited if not overridden. Trả về trong một chuỗi duy nhất bất kỳ dòng nhận xét nào ngay trước mã nguồn đố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ô -đun). Nếu mã nguồn đối tượng không có sẵn, hãy trả về >>> 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 vỏ tương tác. ________ 32 ________ 139 (đối tượng) ¶(object)¶ 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 >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True40 nếu đối tượng là mô-đun, lớp hoặc chức năng tích hợp. ________ 32 ________ 142 (đối tượng) ¶(object)¶ Cố gắng đoán mô -đun nào một đối tượng được xác định. Trả về >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu không thể xác định được mô -đun. ________ 32 ________ 145 (đối tượng) ¶(object)¶ Trả về 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 có cách nào có thể được xác định để có được nguồn. Điều này sẽ thất bại với >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True40 nếu đối tượng là mô-đun, lớp hoặc chức năng tích hợp. ________ 32 ________ 149 (đối tượng) ¶(object)¶ Trả về một 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, chức năng, tracback, 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 trong tệp nguồn gốc, dòng mã đầu tiên được tìm thấy. Một >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True50 được nâng lên nếu mã nguồn không thể được truy xuất. Thay đổi trong phiên bản 3.3: >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True50 is raised instead of >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True52, now an alias of the former. ________ 32 ________ 154 (đối tượng) ¶(object)¶ Trả về 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, chức năng, tracback, 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) True50 được nâng lên nếu mã nguồn không thể được truy xuất. Thay đổi trong phiên bản 3.3: >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True50 is raised instead of >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True52, now an alias of the former. ________ 32 ________ 154 (đối tượng) ¶(doc)¶ Trả về 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, chức năng, tracback, 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) True50 được nâng lên nếu mã nguồn không thể được truy xuất. ________ 32 ________ 159 (Doc) ¶ Làm sạch thụt vào từ các tài liệu được thụt vào để xếp hàng với các khối mã.Tất cả khoảng trắng hàng đầu được loại bỏ khỏi dòng đầu tiên. Bất kỳ khoảng trắng nào có thể được loại bỏ đồng đều khỏi dòng thứ hai trở đi đều được loại bỏ. Các dòng trống ở đầu và cuối sau đó được loại bỏ. Ngoài ra, tất cả các tab được mở rộng đến không gian. Các thiết bị gọi nội tâm với đối tượng chữ ký Mới trong phiên bản 3.3.(callable, *, follow_wrapped=True, globals=None, locals=None, eval_str=False)¶Đố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 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) True60. >>> 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'> ________ 32 ________ 162 (có thể gọi được, *, theo dõi_wrapped = true Trả về một đối tượng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True63 cho >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True64 đã cho: Chấp nhận một loạt các thiết bị gọi Python, từ các hàm và lớp đơn giản đến các đối tượng >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... if (param.kind == param.KEYWORD_ONLY and ... param.default is param.empty): ... print('Parameter:', param) Parameter: c9. Đối với các đối tượng được xác định trong các mô-đun bằng cách sử dụng các chú thích được xâu chuỗi ( >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True66), >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True60 sẽ cố gắng tự động hủy các chú thích bằng cách sử dụng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True68. Các tham số >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True69, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True70 và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True71 được chuyển vào >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True68 khi giải quyết các chú thích; Xem tài liệu cho >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True68 để biết hướng dẫn về cách sử dụng các tham số này.the FAQ entry on positional-only parameters. Tăng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True78 parameter. Pass >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True12 to get a signature of >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True64 specifically ( >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True81 will not be used to unwrap decorated callables.) Một dấu gạch chéo (/) trong chữ ký của một hàm biểu thị rằng các tham số trước đó chỉ là vị trí. Để biết thêm thông tin, hãy xem mục FAQ trên các tham số chỉ có vị trí. >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True82, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True70, and >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True71 parameters. Ghi chú Một số thiết bị gọi có thể không thể 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 xác định trong C không cung cấp siêu dữ liệu về các đối số của họ. Lớp ________ 32 ________ 186 (tham số = none, *, return_annotation = signature.empty) ¶(parameters=None, *, 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 chấp nhận bởi hàm, nó lưu trữ một đối tượng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True87 trong bộ sưu tập >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True88 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) True87, đượ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ố theo đúng thứ tự, tức là chỉ có vị trí, sau đó tham số với mặc định theo thông số mà không có mặc định. Đối số hoàn trả tùy chọn_annotation, có thể là một đối tượng Python tùy ý, là chú thích của Return Return của người 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) True90 để 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.Signature objects are picklable and hashable. ________ 191¶Một điểm đánh dấu cấp độ đặc biệt để chỉ định sự vắng mặt của chú thích trả lại. ________ 192¶Một ánh xạ được đặt hàng của các tham số Tên tên của các đối tượng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True87 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ó bảo tồ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ù trong thực tế, thứ tự này luôn được bảo tồn trong Python 3.Python only explicitly guaranteed that it preserved the declaration order of keyword-only parameters as of version 3.7, although in practice this order had always been preserved in Python 3. ________ 194¶Các chú thích của Return Return cho người được gọi. Nếu có thể gọi được không có chú thích trả về của người khác, thì thuộc tính này được đặt thành >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True95. ________ 196 (*args, ** kwargs) ¶(*args, **kwargs)¶ Tạo một ánh xạ từ các đối số từ khóa và vị trí đến các tham số. Trả về >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True97 nếu >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True98 và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True99 khớp với chữ ký hoặc tăng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True40. ________ 201 (*args, ** kwargs) ¶(*args, **kwargs)¶ Hoạt động tương 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'>02, nhưng cho phép bỏ qua một số đối số cần thiết (bắt chước hành vi >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... if (param.kind == param.KEYWORD_ONLY and ... param.default is param.empty): ... print('Parameter:', param) Parameter: c9.) Trả về >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True97 hoặc tăng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True40 nếu các đối số được thông qua không khớp với chữ ký. ________ 206 (*[, tham số] [, return_annotation]) ¶(*[, parameters][, return_annotation])¶ Tạo một thể hiện chữ ký mới dựa trên phiên bản thay thế đã được gọi trên. Có thể vượt qua các >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True88 và/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'>08 khác nhau để ghi đè các thuộc tính tương ứng của chữ ký cơ sở. Để loại bỏ return_annotation khỏi chữ ký đã sao chép, vượt qua trong >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True95. >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"classMethod ________ 210 (obj, *, theo dõi_wrapped = true, GlobalNs = none, localns = none) ¶(obj, *, follow_wrapped=True, globalns=None, localns=None)¶ Trả về một đối tượng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True63 (hoặc lớp con của nó) cho 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'>12 có thể gọi nhất định. 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'>13 để có được chữ ký 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'>12 mà không cần phải hủy chuỗ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'>15 của 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'>16 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'>17 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 lớp con của >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True63: class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature) Mới trong phiên bản 3.5. Mới trong phiên bản 3.10: >>> 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 and >>> 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 parameters. Lớp ________ 32 ________ 222 (tên, loại, *, mặc định = tham số.empty, chú thích = tham số.empty) ¶(name, kind, *, default=Parameter.empty, annotation=Parameter.empty)¶ 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 >>> 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 để tạo một bản sao được sửa đổi. Thay đổi trong phiên bản 3.5: Đối tượng tham số có thể chọn và có thể băm.Parameter objects are picklable and hashable. ________ 191¶Một điểm đánh dấu cấp độ đặc biệt để chỉ định sự vắng mặt của chú thích trả lại. ________ 192¶Một ánh xạ được đặt hàng của các tham số Tên tên của các đối tượng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True87 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ó bảo tồ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ù trong thực tế, thứ tự này luôn được bảo tồn trong Python 3. CPython generates implicit parameter names of the form >>> 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'>26 on the code objects used to implement comprehensions and generator expressions. ________ 194¶These parameter names are exposed by this module as names like >>> 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ác chú thích của Return Return cho người được gọi. Nếu có thể gọi được không có chú thích trả về của người khác, thì thuộc tính này được đặt thành >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True95. ________ 196 (*args, ** kwargs) ¶ Tạo một ánh xạ từ các đối số từ khóa và vị trí đến các tham số. Trả về>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True97 nếu >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True98 và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True99 khớp với chữ ký hoặc tăng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True40. ________ 201 (*args, ** kwargs) ¶ Hoạt động tương 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'>02, nhưng cho phép bỏ qua một số đối số cần thiết (bắt chước hành vi >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... if (param.kind == param.KEYWORD_ONLY and ... param.default is param.empty): ... print('Parameter:', param) Parameter: c9.) Trả về >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True97 hoặc tăng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True40 nếu các đối số được thông qua không khớp với chữ ký. ________ 206 (*[, tham số] [, return_annotation]) ¶
Ví dụ: In tất cả các đối số chỉ có từ khóa mà không có giá trị mặc định: >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... if (param.kind == param.KEYWORD_ONLY and ... param.default is param.empty): ... print('Parameter:', param) Parameter: c________ 240 ________ 241¶ Mô tả một giá trị enum của tham số.kind. Mới trong phiên bản 3.8. Ví dụ: In tất cả các mô tả về các đối số: >>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only________ 206 (*[, tên] [, loại] [, mặc định] [, chú thích]) ¶(*[, name][, kind][, default][, annotation])¶ Tạo một thể hiện tham số mới dựa trên thể hiện được thay thế đã được gọi trên. Để ghi đè thuộc tính >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True87, hãy truyề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 >>> 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'>29. >>> from inspect import Parameter >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) >>> str(param) 'foo=42' >>> str(param.replace()) # Will create a shallow copy of 'param' 'foo=42' >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo:'spam'" Đã thay đổi trong phiên bản 3.4: Trong các đối tượng tham số Python 3.3 được 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'>45 set to >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 if their >>> 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'>47 was set to >>> 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'>48. This is no longer permitted. Lớp ________ 32 ________ 250¶ Kết quả của cuộc 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'>02 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'>52. Giữ ánh xạ các đối số đến các tham số chức năng. ________ 253¶ Một ánh xạ có thể thay đổi của các tham số Tên tên của các giá trị đối với các 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 >>> 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'>54 sẽ phản ánh trong >>> 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 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'>56. Nên được sử dụng cùng 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'>57 cho bất kỳ mục đích xử lý đối số nào. ________ 258¶ Một bộ phận của các giá trị đối số vị trí. Được tính toán động từ 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'>54. ________ 260¶ Một chỉ đạo của các giá trị từ khóa đối số. Được tính toán động từ 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'>54. ________ 162¶ Một tham chiếu đến đối tượng phụ huynh >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True63. ________ 264 ()()¶ Đặt các giá trị mặc định cho các đối số bị thiếu. Đối với các đối số định vị biến ( >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True98) mặc định là một bộ gốc trống. Đối với các đối số Biến-Keyword ( >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True99) mặc định là một phương pháp trống. >>> def foo(a, b='ham', *args): pass >>> ba = inspect.signature(foo).bind('spam') >>> ba.apply_defaults() >>> ba.arguments {'a': 'spam', 'b': 'ham', 'args': ()} Mới trong phiên bản 3.5. 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'>55 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'>56 có thể được sử dụng để gọi các chức năng: def test(a, *, b): ... sig = signature(test) ba = sig.bind(10, b=20) test(*ba.args, **ba.kwargs) Xem thêm PEP 362 - Đối tượng chữ ký chức năng. - Function Signature Object.Các đặc điểm kỹ thuật chi tiết, chi tiết thực hiện và ví dụ. Các lớp học và chức năng________ 32 ________ 270 (lớp, độc đáo = sai) ¶(classes, unique=False)¶Sắp xếp danh sách các lớp đã cho vào một hệ thống phân cấp 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 có nguồn gốc từ lớp có mục nhập ngay trước danh sách. Mỗi mục là 2-tuple chứa một lớp và một bộ của 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. Mặt khác, các lớp sử dụng nhiều kế thừa và con cháu của họ sẽ xuất hiện nhiều lần. ________ 32 ________ 272 (func) ¶(func)¶Nhận tên và giá trị mặc định của các tham số chức năng Python. Một tuple có 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'>73 được trả về. Args là danh sách các tên tham số. Varargs và từ khóa 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'>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'>75 hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7. Mặc định là một bộ của các giá trị đối số mặc định hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu không có đối số mặc định; Nếu tuple này có n phần tử, chúng tương ứng với n phần tử cuối cùng được liệt kê trong args.named tuple >>> 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 is returned. args is a list of the parameter names. varargs and keywords are the names of the >>> 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 and >>> 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'>75 parameters or >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7. defaults is a tuple of default argument values or >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 if there are no default arguments; if this tuple has n elements, they correspond to the last n elements listed in args. Đã không dùng từ Phiên bản 3.0: 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'>78 for an updated API that is usually a drop-in replacement, but also correctly handles function annotations and keyword-only parameters. Ngoài ra, sử dụng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True60 và đối tượng chữ ký, cung cấp API nội tâm có cấu trúc hơn cho các thiết bị gọi.Signature Object, which provide a more structured introspection API for callables. ________ 32 ________ 281 (func) ¶(func)¶ Nhận tên và giá trị mặc định của các tham số chức năng Python. Một tuple có tên được trả về:named tuple is returned: >>> 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'>82 Args là danh sách các tên tham số vị trí. Varargs 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'>37 hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu các đố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'>75 hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7 nếu các đối số từ khóa tùy ý không được chấp nhận. Mặc định là một bộ N của các 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ó mặc định được xác định. KwonlyArss là danh sách các tên tham số chỉ từ khóa theo thứ tự khai báo. KwonlyDefaults là một tên tham số ánh xạ từ điển từ kwonlyargs đến các 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à một tên tham số ánh xạ từ điển để chú thích. Khóa đặc biệt >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True8 được sử dụng để báo cáo chú thích giá trị trả về hàm (nếu có). Lưu ý rằng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True60 và đối tượng chữ ký cung cấp API được đề xuất cho nội tâm có thể gọi được và hỗ trợ các hành vi bổ sung (như đối số chỉ có vị trí) đôi khi gặp trong API mô-đun mở rộng. Hàm 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) True4.Signature Object provide the recommended API for callable introspection, and support additional behaviours (like positional-only arguments) that are sometimes encountered in extension module APIs. This function is retained primarily for use in code that needs to maintain compatibility with the Python 2 >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True4 module API. Đã 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) True60, but still ignores >>> 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'>15 attributes and includes the already bound first parameter in the signature output for bound methods. Đã 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 phản đối có lợi cho >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True60 in Python 3.5, but that decision has been reversed in order to restore a clearly supported standard interface for single-source Python 2/3 code migrating away from the legacy >>> 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'>94 API. Đã thay đổi trong phiên bản 3.7: Python chỉ đảm bảo rõ ràng rằng nó bảo tồ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ù trong thực tế, thứ tự này luôn được bảo tồn trong Python 3.Python only explicitly guaranteed that it preserved the declaration order of keyword-only parameters as of version 3.7, although in practice this order had always been preserved in Python 3. ________ 32 ________ 296 (khung)(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ê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'>97 đượ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 đối 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'>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'>75 hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7. Người dân địa phương là từ điển địa phương của khung đã cho.named tuple >>> 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'>97 is returned. args is a list of the argument names. varargs and keywords are the names of the >>> 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 and >>> 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'>75 arguments or >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7. locals is the locals dictionary of the given frame. 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. ________ 32 ________ 302 (args [, varargs, varkw, mặc định, kwonlyargs, kwonlydefaults, chú thích [, định dạng, định dạng, định dạng, định dạng, định dạng, định dạng, định dạng])(args[, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations[, formatarg, formatvarargs, formatvarkw, formatvalue, formatreturns, formatannotations]])¶Định dạng một thông số đối số đẹp từ các 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'>78. Bảy đối số đầu tiê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'>55, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"05, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"06, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"07, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"08, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"09, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"10). Sáu đối số khác là các hàm được gọi để biến tên đối số, tên đối 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'>37, tên đối 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'>75, giá trị mặc định, chú thích trả về và chú thích riêng lẻ thành các chuỗi, tương ứng. Ví dụ: >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True0 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) True60 and Signature Object, which provide a better introspecting API for callables. ________ 32 ________ 315 (args [, varargs, varkw, người dân địa phương, định dạng, định dạng, định dạng, định dạng, đị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 >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"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. ________ 32 ________ 302 (args [, varargs, varkw, mặc định, kwonlyargs, kwonlydefaults, chú thích [, định dạng, định dạng, định dạng, định dạng, định dạng, định dạng, định dạng])(cls)¶Định dạng một thông số đối số đẹp từ các 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'>78.Bảy đối số đầu tiê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'>55, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"05, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"06, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"07, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"08, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"09, >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"10).(func, /, *args, **kwds)¶ Sáu đối số khác là các hàm được gọi để biến tên đối số, tên đối 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'>37, tên đối 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'>75, giá trị mặc định, chú thích trả về và chú thích riêng lẻ thành các chuỗi, tương ứng. >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True1 Ví dụ: >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True0(func)¶ 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) True60 và đối tượng chữ ký, cung cấp API hướng nội tốt hơn cho các thiết bị gọi.named tuple >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"27 is returned. nonlocals maps referenced names to lexical closure variables, globals to the function’s module globals and builtins to the builtins visible from the function body. unbound is the set of names referenced in the function that could not be resolved at all given the current module globals and builtins. ________ 32 ________ 315 (args [, varargs, varkw, người dân địa phương, định dạng, định dạng, định dạng, định dạng, định dạng]) Định dạng một thông số đối số đẹp từ bốn giá trị được trả về bởi Trả về một bộ tải của các lớp cơ sở CLS, bao gồm 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 tuple này. Lưu ý rằng thứ tự độ phân giải phương thức phụ thuộc vào loại CLS. Trừ khi một siêu dữ liệu do người dùng rất đặc biệt được sử dụng, CLS sẽ là yếu tố đầu tiên của tuple. ________ 32 ________ 320 (func, /, *args, ** kwds) ¶ Liên kết các ARG và KWD với tên đối số của hàm Python hoặc Phương thức Func, như thể nó được gọi với chúng. Đối với các phương thức ràng buộc, liên kết cũng là đối số đầu tiên (thường được đặt tên là >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"21) với thể hiện liên quan. Một dict được trả về, ánh xạ các tên đối số (bao gồm tên của các đối 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'>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'>75, nếu có) cho các giá trị của chúng từ ARGS và KWD. Trong trường hợp gọi Func không chính xác, tức là bất cứ khi nào >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"24 sẽ tăng một ngoại lệ vì chữ ký không tương thích, một ngoại lệ của cùng loại và cùng một thông điệp hoặc tương tự được nêu ra. Ví dụ: Mới trong phiên bản 3.2. ________ 32 ________ 326 (FUNC) ¶(obj, *, globals=None, locals=None, eval_str=False)¶Nhận ánh xạ các tham chiếu tên bên ngoài trong hàm Python hoặc Phương thức Func cho các giá trị hiện tại của chúng. Một tuple có tên >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"27 được trả về. Các bản đồ không thuộc địa điểm được tham chiếu tên cho các biến đóng từ vựng, toàn cầu cho chức năng mô -đun toàn cầu và tích hợp các bản tích hợp có thể nhìn thấy từ cơ thể chức năng. Không ràng buộc là tập hợp các tên được tham chiếu trong hàm không thể được giải quyết ở tất cả các mô -đun hiện tại Globals và Buildins. >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True40 được nâng lên nếu func không phải là hàm hoặc phương pháp python. Trả lại một dict. >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"39 trả về một dict mới mỗi khi nó được gọi là; Gọi nó hai lần trên cùng một đối tượng sẽ trả về hai dicts khác nhau nhưng tương đương. 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) True71 kiểm soát xem các giá trị của loại >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"41 có được thay thế bằng kết quả gọi >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True77 trên các giá trị đó:
>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True82 và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True70 được chuyển sang >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True77; Xem tài liệu cho >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True77 để biết thêm thông tin. Nếu >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True82 hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True70 là >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7, hàm này có thể thay thế giá trị đó bằng mặc định cụ thể theo ngữ cảnh, tùy thuộc vào >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"63:
Gọi >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"52 là thực tiễn tốt nhất để truy cập các chú thích của bất kỳ đối tượng nào. Xem chú thích thực tiễn tốt nhất để biết thêm thông tin về các chú thích thực hành tốt nhất.Annotations Best Practices for more information on annotations best practices. Mới trong phiên bản 3.10. Người phiên dịch ngăn xếpKhi các chức năng sau, trả về các bản ghi khung hình, mỗi bản ghi có tên là Tuple >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"78. Bộ tuple chứa đối tượng khung, tên tệp, số dòng của dòng hiện tại, tên hàm, danh sách các dòng ngữ cảnh từ mã nguồn và chỉ mục của dòng hiện tại trong danh sách đó.named tuple >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"78. The tuple contains the frame object, the filename, the line number of the current line, the function name, a list of lines of context from the source code, and the index of the current line within that list. Đã thay đổi trong phiên bản 3.5: Trả về một tuple có tên thay vì một tuple.Return a named tuple instead of a tuple. 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 chức năng 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 kỳ 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 tạo thành chu kỳ có thể trở nên dài hơn ngay cả khi máy dò chu kỳ tùy chọn Python tựa được bật. Nếu các chu kỳ như vậy phải được tạo ra, điều quan trọng là đảm bảo chúng bị phá vỡ rõ ràng để tránh sự phá hủy chậm trễ của các vật thể và tăng mức tiêu thụ bộ nhớ xảy ra. Mặc dù máy dò chu kỳ sẽ bắt được chúng, việc phá hủy các khung (và các biến cục bộ) có thể được thực hiện xác định bằng cách loại bỏ chu kỳ trong mệnh đề >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"79. Điều này cũng rất quan trọng nếu máy dò chu kỳ bị vô hiệu hóa khi Python được biên dịch hoặc sử dụng >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"80. Ví dụ: >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True2 Nếu bạn muốn giữ khung hình xung quanh (ví dụ: để in dấu vết sau), bạn cũng có thể phá vỡ các chu kỳ tham chiếu bằng cách sử dụng phương thức >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"81. Đối số ngữ cảnh tùy chọn được hỗ trợ bởi hầu hết các chức năng này chỉ định số lượng dòng ngữ cảnh để quay lại, được tập trung xung quanh dòng hiện tại. ________ 32 ________ 383 (khung, bối cảnh = 1) ¶(frame, context=1)¶Nhận thông tin về một khung hoặc đối tượng theo dõi. Một bộ tuple >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"84 được trả về.named tuple >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"84 is returned. ________ 32 ________ 386 (khung, bối cảnh = 1) ¶(frame, context=1)¶ Nhận danh sách các bản ghi khung cho 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 ra khung hình. Mục đầu tiên trong danh sách trả về đại diện cho khung; Mục cuối cùng đại diện cho cuộc gọi ngoài cùng trên ngăn xếp khung hình. Thay đổi trong phiên bản 3.5: Danh sách các bộ dữ liệu được đặt tên >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"78 is returned. ________ 32 ________ 389 (Traceback, bối cảnh = 1) ¶(traceback, context=1)¶ Nhận một danh sách các bản ghi khung cho khung Traceback 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 là kết quả của khung. Mục đầu tiên trong danh sách đại diện cho TraceBack; Mục cuối cùng đại diện cho nơi ngoại lệ được nâng lên. Thay đổi trong phiên bản 3.5: Danh sách các bộ dữ liệu được đặt tên >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"78 is returned. ________ 32 ________ 389 (Traceback, bối cảnh = 1) ¶()¶ Nhận một danh sách các bản ghi khung cho khung Traceback 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 là kết quả của khung. Mục đầu tiên trong danh sách đại diện cho TraceBack; Mục cuối cùng đại diện cho nơi ngoại lệ được nâng lên. ________ 32 ________ 392 () This function relies on Python stack frame support in the interpreter, which isn’t guaranteed to exist in all implementations of Python. If running in an implementation without Python stack frame support this function returns >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True7.________ 32 ________ 395 (bối cảnh = 1) ¶(context=1)¶ Trả về một danh sách các bản ghi khung cho ngăn xếp người gọi. Mục đầu tiên trong danh sách trả về đại diện cho người gọi; Mục cuối cùng đại diện cho cuộc gọi ngoài cùng trên ngăn xếp. Thay đổi trong phiên bản 3.5: Danh sách các bộ dữ liệu được đặt tên >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"78 is returned. ________ 32 ________ 398 (bối cảnh = 1) ¶(context=1)¶ Trả về một danh sách các bản ghi khung 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 vào. Mục đầu tiên trong danh sách đại diện cho người gọi; Mục cuối cùng đại diện cho nơi ngoại lệ được nâng lên. Thay đổi trong phiên bản 3.5: Danh sách các bộ dữ liệu được đặt tên >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"78 is returned. ________ 32 ________ 398 (bối cảnh = 1) ¶Trả về một danh sách các bản ghi khung 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 vào. Mục đầu tiên trong danh sách đại diện cho người gọi; Mục cuối cùng đại diện cho nơi ngoại lệ được nâng lên. Tìm nạp các thuộc tính Statorment¶ Cả>>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"45 và class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)01 đề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à class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)02 và class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)03 có thể được gọi.(obj, attr, default=None)¶ Đối với các trường hợp bạn muốn nội tâm thụ động, như các công cụ tài liệu, điều này có thể bất tiện. class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)04 có chữ ký giống như >>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"45 nhưng tránh được thực thi mã khi lấy các thuộc tính. ________ 32 ________ 407 (obj, attr, mặc định = không) ¶ 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ả, class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)02 hoặc class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)03. Lưu ý: Hàm này có thể không thể truy xuất 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 có thể (như các mô tả nâng cao thuộc tính). 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 cá thể class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)10 bị che khuất bởi một thành viên khác (ví dụ: thuộc tính) thì hàm này sẽ không thể tìm thấy các thành viên thể hiện. Mới trong phiên bản 3.2. >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True3 class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature) 04 không giải quyết các mô tả, ví dụ như mô tả khe cắm hoặc 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ý những điều này với mã như sau. Lưu ý rằng đối với các mô tả getset tùy ý gọi các mô tả này có thể kích hoạt thực thi mã: Trạng thái hiện tại của máy phát điện và coroutines¶(generator)¶Khi triển khai các bộ lập lịch coroutine và đối với các công cụ tạo trình tạo nâng cao khác, rất hữu ích để xác định xem một 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, hoặc đã chấm dứt. class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)12 cho phép trạng thái hiện tại của một máy phát được xác định dễ dàng. ________ 32 ________ 414 (máy phát) ¶
Lưu ý: Hàm này có thể không thể truy xuất 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 có thể (như các mô tả nâng cao thuộc tính). 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 cá thểclass MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)10 bị che khuất bởi một thành viên khác (ví dụ: thuộc tính) thì hàm này sẽ không thể tìm thấy các thành viên thể hiện.(coroutine)¶ Mới trong phiên bản 3.2. class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)04 không giải quyết các mô tả, ví dụ như mô tả khe cắm hoặc 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.
Nhận trạng thái hiện tại của một thiết bị máy phát điện. Trạng thái có thể là: Gen_created: Chờ bắt đầu thực thi.(generator)¶GEN_RUNCY: Hiện đang được thực hiện bởi thông dịch viên. GEN_SUSPENDS: Hiện đang bị treo ở biểu thức năng suất.generator with no currently associated frame, then an empty dictionary is returned. >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True40 is raised if generator is not a Python generator object. Gen_closes: Thực thi đã hoàn thành. This function relies on the generator exposing a Python stack frame for introspection, which isn’t guaranteed to be the case in all implementations of Python. In such cases, this function will always return an empty dictionary. ________ 32 ________ 416 (Coroutine) ¶ Nhận trạng thái hiện tại của một đối tượng Coroutine. Hàm được dự định sẽ được sử dụng với các đối tượng coroutine được tạo bởi các hàm>>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only7, nhưng sẽ chấp nhận bất kỳ đối tượng giống như coroutine nào có các thuộc tính class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)18 và class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)19.(coroutine)¶ Trạng thái có thể là: Nhận trạng thái hiện tại của một thiết bị máy phát điện. Trạng thái có thể là:Gen_created: Chờ bắt đầu thực thi. GEN_RUNCY: Hiện đang được thực hiện bởi thông dịch viên.GEN_SUSPENDS: Hiện đang bị treo ở biểu thức năng suất. Gen_closes: Thực thi đã hoàn thành.________ 32 ________ 416 (Coroutine) ¶ ________ 32 ________ 435¶Đối tượng mã có tham số vị trí thay đổi (giống như ____ 198). ________ 32 ________ 438¶Đối tượng mã có tham số từ khóa biến (giống như ____ 199). ________ 32 ________ 441¶Cờ được đặt khi đối tượng mã là một hàm lồng nhau. ________ 32 ________ 443¶Cờ được đặt khi đối tượng mã là hàm trình tạo, tức là đối tượng Trình tạo được trả về khi đối tượng mã được thực thi. ________ 32 ________ 445¶Cờ được đặt nếu không có biến miễn phí hoặc biến di động. ________ 32 ________ 447¶Cờ được đặt khi đối tượng mã là hàm coroutine. Khi đối tượng mã được thực thi, nó sẽ trả về một đối tượng Coroutine. Xem PEP 492 để biết thêm chi tiết.PEP 492 for more details. Mới trong phiên bản 3.5. ________ 32 ________ 449¶Cờ được sử dụng để biến đổi trình tạo thành coroutines dựa trên máy phát. Các đối tượng của máy phát với cờ này có thể được sử dụng trong biểu thức >>> from inspect import Parameter >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) >>> str(param) 'foo=42' >>> str(param.replace()) # Will create a shallow copy of 'param' 'foo=42' >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo:'spam'"5 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 các đối tượng Coroutine. Xem PEP 492 để biết thêm chi tiết.PEP 492 for more details. Mới trong phiên bản 3.5. ________ 32 ________ 449¶Cờ được sử dụng để biến đổi trình tạo thành coroutines dựa trên máy phát. Các đối tượng của máy phát với cờ này có thể được sử dụng trong biểu thức >>> from inspect import Parameter >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) >>> str(param) 'foo=42' >>> str(param.replace()) # Will create a shallow copy of 'param' 'foo=42' >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo:'spam'"5 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 các đối tượng Coroutine. Xem PEP 492 để biết thêm chi tiết.PEP 525 for more details. ________ 32 ________ 453¶ 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ó sẽ trả về một đối tượng 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 lá 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ể được gỡ bỏ hoặc không dùng nữa trong các bản phát hành Python trong tương lai. Nó khuyến nghị sử dụng API công khai từ mô -đun >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True4 cho bất kỳ nhu cầu hướng nội nào. Giao diện dòng lệnh Mô -đun>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True4 cũng cung cấp khả năng 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ột mô -đun và in nguồn của mô -đun đó. Một lớp hoặc chức năng trong mô -đun có thể được in thay vào đó bằng cách thêm dấu hai chấm và tên đủ điều kiện của đối tượng đích. Làm thế nào để bạn truy cập một đối tượng chức năng trong Python?Các thuộc tính của một lớp cũng có thể được truy cập bằng các phương thức và hàm tích hợp sau: getattr ()-hàm này được sử dụng để truy cập thuộc tính của đối tượng. HasAttr () - Hàm này được sử dụng để kiểm tra xem thuộc tính có tồn tại hay không. setAttr () - Hàm này được sử dụng để đặt thuộc tính.getattr() – This function is used to access the attribute of object. hasattr() – This function is used to check if an attribute exist or not. setattr() – This function is used to set an attribute.
Đối tượng chức năng trong Python là gì?Trong Python, các chức năng hoạt động giống như bất kỳ đối tượng nào khác, chẳng hạn như INT hoặc một danh sách.Điều đó có nghĩa là bạn có thể sử dụng các chức năng làm đối số cho các hàm khác, lưu trữ các hàm làm giá trị từ điển hoặc trả về một hàm từ hàm khác.
Làm thế nào để bạn phân tích một đối tượng trong Python?Kiểm tra - Phân tích các đối tượng Python.. Kiểm tra chữ ký của hàm .. Tìm ra loại đối tượng .. Kiểm tra nội dung của lớp .. Kiểm tra nội dung của mô -đun .. Truy xuất mã nguồn của phương thức/chức năng .. Đối số định dạng của hàm .. Nhận thông tin ngăn xếp thông tin .. Làm thế nào chức năng có thể được truyền dưới dạng đối tượng trong Python?Bởi vì các chức năng là các đối tượng, chúng ta có thể truyền chúng như các đối số cho các chức năng khác.Các chức năng có thể chấp nhận các chức năng khác vì các đối số còn được gọi là các hàm bậc cao hơn.Trong ví dụ dưới đây, một lời chào hàm được tạo có chức năng như một đối số.. Functions that can accept other functions as arguments are also called higher-order functions. In the example below, a function greet is created which takes a function as an argument. |