Hướng dẫn how do you read a function object in python? - làm thế nào để bạn đọc một đối tượng hàm trong python?

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:

  • có loại
  • có thể được gửi dưới dạng đối số đến một hàm khác
  • có thể được sử dụng trong biểu thức
  • có thể trở thành một phần của nhiều dữ liệu khác nhau

Mã nguồn: lib/expect.py Lib/inspect.py

Mô -đun >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 4 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ên

Hàm >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 5 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) True 5. 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:

Loại hình

Thuộc tính

Sự mô tả

Mô -đun

__doc__

Chuỗi tài liệu

__file__

Tên tệp (Thiếu cho các mô-đun tích hợp)

class

__doc__

Chuỗi tài liệu

__name__

Tên tệp (Thiếu cho các mô-đun tích hợp)

__qualname__

Tên mà lớp này được xác định

__module__

Tên đủ điều kiện

Tên của mô -đun trong đó lớp này được xác định

__doc__

Chuỗi tài liệu

__name__

Tên tệp (Thiếu cho các mô-đun tích hợp)

__qualname__

Tên mà lớp này được xác định

__func__

Tên đủ điều kiện

__self__

Tên của mô -đun trong đó lớp này được xác định

__module__

phương pháp

function

__doc__

Chuỗi tài liệu

__name__

Tên tệp (Thiếu cho các mô-đun tích hợp)

__qualname__

Tên mà lớp này được xác định

__code__

Tên đủ điều kiệnbytecode

__defaults__

Tên của mô -đun trong đó lớp này được xác định

__kwdefaults__

phương pháp

__globals__

Tên mà phương pháp này đã được xác định

__builtins__

đối tượng chức năng chứa thực hiện phương thức

__annotations__

ví dụ mà phương thức này bị ràng buộc hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 7

__module__

Tên của mô -đun trong đó phương pháp này được xác định

Tên mà hàm này được xác định

tb_frame

đối tượng mã chứa mã byte được biên dịch

tb_lasti

Tuple của bất kỳ giá trị mặc định nào cho các tham số từ khóa hoặc vị trí

tb_lineno

ánh xạ của bất kỳ giá trị mặc định nào cho các tham số chỉ từ khóa

tb_next

không gian tên toàn cầu trong đó chức năng này được xác định

không gian tên xây dựng

f_back

ánh xạ tên tham số để chú thích; Khóa >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 8 được dành riêng cho các chú thích trả lại.

f_builtins

Tên của mô -đun trong đó hàm này được xác định

f_code

tìm lại

f_globals

đối tượng khung ở cấp độ này

f_lasti

Tuple của bất kỳ giá trị mặc định nào cho các tham số từ khóa hoặc vị trí

f_lineno

ánh xạ của bất kỳ giá trị mặc định nào cho các tham số chỉ từ khóa

f_locals

không gian tên toàn cầu trong đó chức năng này được xác định

f_trace

không gian tên xây dựng

ánh xạ tên tham số để chú thích; Khóa >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 8 được dành riêng cho các chú thích trả lại.

co_argcount

Tên của mô -đun trong đó hàm này được xác định

co_code

tìm lại

co_cellvars

đối tượng khung ở cấp độ này

co_consts

Chỉ mục hướng dẫn cố gắng cuối cùng trong mã byte

co_filename

Số dòng hiện tại trong mã nguồn Python

co_firstlineno

Đối tượng Traceback bên trong tiếp theo (được gọi bởi cấp độ này)

co_flags

khunghere

co_lnotab

đối tượng khung bên ngoài tiếp theo (người gọi khung này)

co_freevars

không gian tên tích hợp được nhìn thấy bởi khung này

co_posonlyargcount

Đối tượng mã được thực thi trong khung này

co_kwonlyargcount

không gian tên toàn cầu được nhìn thấy bởi khung này

co_name

không gian tên địa phương nhìn thấy bởi khung này

co_names

Chức năng truy tìm cho khung này hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 7

co_nlocals

mã số

co_stacksize

Số lượng đối số (không bao gồm các đối số từ khóa, * hoặc ** args)

co_varnames

Chuỗi mã byte được biên dịch

Tuple của tên của các biến tế bào (được tham chiếu bởi phạm vi chứa)

__name__

Tuple của các hằng số được sử dụng trong mã byte

__qualname__

Tên mà lớp này được xác định

gi_frame

không gian tên xây dựng

gi_running

ánh xạ tên tham số để chú thích; Khóa >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 8 được dành riêng cho các chú thích trả lại.

gi_code

ánh xạ tên tham số để chú thích; Khóa >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 8 được dành riêng cho các chú thích trả lại.

gi_yieldfrom

Tên của mô -đun trong đó hàm này được xác định

tìm lại

__name__

Tuple của các hằng số được sử dụng trong mã byte

__qualname__

Tên mà lớp này được xác định

cr_await

Tên đủ điều kiện

cr_frame

không gian tên xây dựng

cr_running

ánh xạ tên tham số để chú thích; Khóa >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 8 được dành riêng cho các chú thích trả lại.

cr_code

ánh xạ tên tham số để chú thích; Khóa >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 8 được dành riêng cho các chú thích trả lại.

cr_origin

Tên của mô -đun trong đó hàm này được xác định

tìm lại

__doc__

Chuỗi tài liệu

__name__

Tên tệp (Thiếu cho các mô-đun tích hợp)

__qualname__

Tên mà lớp này được xác định

__self__

Tên đủ điều kiện

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) True 7(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) True 5 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) True 7 đượ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) True 7.

Đã 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.The function is based directly on 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: c 9 bây giờ trả về class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature) 6 nếu hàm được gói là hàm tạo Python.Functions wrapped in >>> 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 9 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-only 7).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-only 7 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-only 7.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-only 7 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-only 7.

________ 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-only 7.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) True 03, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 04, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 05 hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 06 là đúng.

Điều này, ví dụ, đúng với >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 07. Một đối tượng vượt qua thử nghiệm này có phương thức >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 08 nhưng không phải là phương thức >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 09, nhưng ngoài ra tập hợp các thuộc tính khác nhau. Mộ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'> 9 thường hợp lý và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 11 thường là. getsets are attributes defined in extension modules via >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 26 structures. For Python implementations without such types, this method will always return >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 12.

________ 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) True 31. Đối với việc triển khai Python mà không có loại như vậy, phương pháp này sẽ luôn trả về >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 12. Member descriptors are attributes defined in extension modules via >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 31 structures. For Python implementations without such types, this method will always return >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 12.

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) True 35. 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) True 7 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) True 7. Đ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) True 40 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) True 7 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) True 7 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) True 40 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) True 50 đượ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) True 50 được nâng lên thay vì >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 52, giờ là bí danh của trước đây.>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 50 is raised instead of >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 52, 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) True 50 đượ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) True 50 được nâng lên thay vì >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 52, giờ là bí danh của trước đây.>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 50 is raised instead of >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 52, 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) True 50 đượ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) True 60.

>>> 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) True 63 cho >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 64 đã 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: c 9.

Đố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) True 66), >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 60 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) True 68. Các tham số >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 69, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 70 và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 71 được chuyển vào >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 68 khi giải quyết các chú thích; Xem tài liệu cho >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 68 để 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) True 74 nếu không có chữ ký nào có thể được cung cấp và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 40 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) True 71 không phải là sai, thì cuộc gọi >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 77 để không ngừng các chú thích có thể có khả năng nâng cao bất kỳ loại ngoại lệ nào.>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 78 parameter. Pass >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 12 to get a signature of >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 64 specifically (>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 81 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) True 82, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 70, and >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 71 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) True 87 trong bộ sưu tập >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 88 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) True 87, đượ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) True 90 để 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) True 87 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) True 95.

________ 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) True 97 nếu >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 98 và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 99 khớp với chữ ký hoặc tăng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 40.

________ 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: c 9.) Trả về >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 97 hoặc tăng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 40 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) True 88 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) True 95.

>>> 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) True 63 (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) True 63:

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 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 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'> 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) True 87 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) True 95.

________ 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) True 97 nếu >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 98 và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 99 khớp với chữ ký hoặc tăng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 40.

________ 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: c 9.) Trả về >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 97 hoặc tăng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 40 nếu các đối số được thông qua không khớp với chữ ký.

________ 206 (*[, tham số] [, 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) True 88 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) True 95.

classMethod ________ 210 (obj, *, theo dõi_wrapped = true, GlobalNs = none, localns = none) ¶

POSITIONAL_ONLY

Trả về một đối tượng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 63 (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.

POSITIONAL_OR_KEYWORD

Phương pháp này đơn giản hóa lớp con của >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 63:

VAR_POSITIONAL

Mới trong phiên bản 3.5.

KEYWORD_ONLY

Giá trị phải được cung cấp như một đối số từ khóa. Các tham số chỉ từ khóa là các tham số xuất hiện sau mục nhậ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'> 37 hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 98 trong định nghĩa chức năng Python.

VAR_KEYWORD

Một lệnh của các đối số từ khóa mà aren 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) True 99 trong định nghĩa hàm Python.

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) True 87, 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 được đặt thành >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 7 nếu >>> 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 của chúng được đặt thà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'> 48. Điều này không còn được phép.In Python 3.3 Parameter objects were allowed to have >>> 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) True 7 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) True 63.

________ 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) True 98) 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) True 99) 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) True 7. 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) True 7 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) True 7. defaults is a tuple of default argument values or >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 7 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 cho API được cập nhật thường là thay thế thả vào, nhưng cũng xử lý chính xác các chú thích chức năng và các tham số chỉ từ khóa.Use >>> 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) True 60 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) True 7 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) True 7 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) True 7 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) True 8 đượ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) True 60 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) True 4.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) True 4 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) True 60, nhưng vẫn bỏ qua 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'> 15 và bao gồm tham số đầu tiên đã bị ràng buộc trong đầu ra chữ ký cho các phương thức bị ràng buộc.This function is now based on >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 60, 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) True 60 trong Python 3.5, nhưng quyết định đó đã được đả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 của SOUSS Python 2/3 di chuyển khỏi di sả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'> 94 API.This method was previously documented as deprecated in favour of >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 60 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) True 7. 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) True 7. 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) True 0

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) True 60 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.Use >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 60 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) True 1

Ví dụ:

>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 0(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) True 60 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 >>> 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.

________ 32 ________ 318 (CLS) ¶(func, *, stop=None)

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) True 40 đượ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:

  • Nếu >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 71 là đúng, 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 sẽ không được sắp xếp bằng cách sử dụng >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 77. Điều này được dự định để sử dụng với các chú thích chuỗi (>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 66).

  • Nếu >>> 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 không có một chú thích, hãy trả lại một dict trống. .

  • Bỏ qua các chú thích được thừa hưởng trên các lớp học. Nếu một lớp học không có chú thích riêng của mình ra lệnh, hãy trả lại một dict trống.

  • Tất cả các quyền truy cập cho các thành viên đối tượng và các giá trị dict được thực hiện bằng cách 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'" 45 và >>> 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'" 46 cho an toàn.

  • Luôn luôn, luôn luôn, luôn luôn trả lại một dict mới được tạo ra.

>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 71 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) True 77 trên các giá trị đó:

  • Nếu eval_str là đúng, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 77 được gọi là 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. .

  • Nếu eval_str là sai (mặc định), 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 không thay đổi.

>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 82 và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 70 được chuyển sang >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 77; Xem tài liệu cho >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 77 để biết thêm thông tin. Nếu >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 82 hoặc >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 70 là >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 7, 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:

  • Nếu >>> 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 là một mô -đun, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 82 mặc định 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'" 66.

  • Nếu >>> 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 là một lớp, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 82 mặc định 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'" 69 và >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 70 mặc định cho không gian tên lớ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'> 12.

  • Nếu >>> 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 là có thể gọi được, >>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True 82 mặc định 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'" 74, mặc dù nếu >>> 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 là một hàm được bọ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'" 76) thì trước tiên thì chưa được mở.

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ếp

Khi 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) True 2

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 được trả về.A list of named tuples >>> 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 được trả về.A list of named tuples >>> 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) True 7.

________ 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 được trả về.A list of named tuples >>> 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 được trả về.A list of named tuples >>> 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) True 3

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) ¶
  • 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.

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.
  • 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¶

  • 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) ¶

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) True 40 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-only 7, 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) True 4 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) True 4 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.

Chủ đề