Mô-đun cung cấp một số chức năng hữu ích để giúp lấy thông tin về các đối tượng trực tiếp như mô-đun, lớp, phương thức, hàm, truy nguyên, đối tượng khung và đối tượng mã. Ví dụ: nó có thể giúp bạn kiểm tra nội dung của một lớp, truy xuất mã nguồn của một phương thức, trích xuất và định dạng danh sách đối số cho một hàm hoặc lấy tất cả thông tin bạn cần để hiển thị truy nguyên chi tiết.
Có bốn loại dịch vụ chính được cung cấp bởi mô-đun này. kiểm tra kiểu, lấy mã nguồn, kiểm tra các lớp và chức năng cũng như kiểm tra ngăn xếp trình thông dịch
Các loại và thành viên
Hàm truy xuất các thành viên của một đối tượng, chẳng hạn như một lớp hoặc mô-đun. Các hàm có tên bắt đầu bằng “is” chủ yếu được cung cấp dưới dạng các lựa chọn thuận tiện cho đối số thứ hai để. Chúng 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 [xem phần thuộc tính mô-đun]
Loại
Thuộc tính
Sự miêu tả
tầng lớp
__doc__
chuỗi tài liệu
__Tên__
tên mà lớp này đã được xác định
__tên số lượng__
tên đủ điều kiện
__mô-đun__
tên của mô-đun trong đó lớp này được định nghĩa
phương pháp
__doc__
chuỗi tài liệu
__Tên__
tên mà phương pháp này đã được xác định
__tên số lượng__
tên đủ điều kiện
__func__
đối tượng hàm chứa việc thực hiện phương thức
__bản thân__
thể hiện mà phương pháp này bị ràng buộc, hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7
__mô-đun__
tên của mô-đun trong đó phương thức này được xác định
hàm số
__doc__
chuỗi tài liệu
__Tên__
tên mà chức năng này đã được xác định
__tên số lượng__
tên đủ điều kiện
__mã số__
đối tượng mã chứa chức năng biên dịch
__mặc định__
bộ của bất kỳ giá trị mặc định nào cho tham số vị trí hoặc từ khóa
__kwdefaults__
ánh xạ của bất kỳ giá trị mặc định nào cho các tham số chỉ từ khóa
__globals__
không gian tên toàn cầu trong đó chức năng này được xác định
__xây dựng__
không gian tên dựng sẵn
__chú thích__
ánh xạ tên tham số thành chú thích;
__mô-đun__
tên của mô-đun trong đó chức năng này được xác định
tìm lại
tb_frame
đối tượng khung ở cấp độ này
tb_lasti
chỉ mục của lệnh được thử lần cuối trong mã byte
tb_lineno
số dòng hiện tại trong mã nguồn Python
tb_next
đối tượng truy nguyên bên trong tiếp theo [được gọi theo cấp độ này]
khung
f_back
đối tượng khung bên ngoài tiếp theo [người gọi khung này]
f_buildins
không gian tên dựng sẵn được nhìn thấy bởi khung này
f_code
đối tượng mã đang được thực thi trong khung này
f_globals
không gian tên toàn cầu được nhìn thấy bởi khung này
f_lasti
chỉ mục của lệnh được thử lần cuối trong mã byte
f_lineno
số dòng hiện tại trong mã nguồn Python
f_locals
không gian tên cục bộ được nhìn thấy bởi khung này
f_trace
chức năng theo dõi cho khung này, hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7
mã số
co_argcount
số lượng đối số [không bao gồm đối số chỉ từ khóa, * hoặc ** đối số]
co_code
chuỗi mã byte được biên dịch thô
co_cellvars
bộ tên của các biến ô [được tham chiếu bằng cách chứa phạm vi]
co_consts
bộ hằng số được sử dụng trong mã byte
co_filename
tên của tệp trong đó đối tượng mã này được tạo
co_firstlineno
số dòng đầu tiên trong mã nguồn Python
co_flags
bitmap của
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation0 cờ, đọc thêm
co_lnotab
ánh xạ được mã hóa của số dòng thành các chỉ số mã byte
co_freevars
bộ tên của các biến tự do [được tham chiếu thông qua bao đóng của hàm]
co_posonlyargcount
số đối số chỉ vị trí
co_kwwonargcount
số đối số chỉ từ khóa [không bao gồm ** arg]
co_name
tên mà đối tượng mã này đã được xác định
co_qualname
tên đủ điều kiện mà đối tượng mã này đã được xác định
co_names
bộ tên khác với đối số và hàm cục bộ
co_nlocals
số biến cục bộ
co_stacksize
yêu cầu không gian ngăn xếp máy ảo
co_varnames
bộ tên của các đối số và các biến cục bộ
máy phát điện
__Tên__
Tên
__tên số lượng__
tên đủ điều kiện
gi_frame
khung
gi_running
máy phát điện có chạy không?
gi_code
mã số
gi_yieldfrom
đối tượng được lặp bởi
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation1, hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7
công việc thường ngày
__Tên__
Tên
__tên số lượng__
tên đủ điều kiện
cr_await
đối tượng đang được chờ đợi, hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7
cr_frame
khung
cr_running
coroutine có đang chạy không?
cr_code
mã số
cr_origin
nơi coroutine được tạo ra, hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7. Thấy
được xây dựng trong
__doc__
chuỗi tài liệu
__Tên__
tên gốc của hàm hoặc phương thức này
__tên số lượng__
tên đủ điều kiện
__bản thân__
thể hiện mà một phương thức bị ràng buộc, hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7
Đã thay đổi trong phiên bản 3. 5. Thêm thuộc tính
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation7 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'].annotation8 vào bộ tạo.
Thuộc tính
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation9 của các trình tạo hiện được đặt từ tên hàm, thay vì tên mã và giờ đây nó có thể được sửa đổi
Đã thay đổi trong phiên bản 3. 7. Thêm thuộc tính
>>> 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 vào coroutines.
Đã thay đổi trong phiên bản 3. 10. Thêm thuộc tí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'"1 vào hàm. kiểm tra. nhận thành viên[đối tượng[ , predicate]]
Trả về tất cả các thành viên của một đối tượng trong danh sách
>>> 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'"2 cặp được sắp xếp theo tên. Nếu đối số vị từ tùy chọn—sẽ được gọi với đối tượng
>>> 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'"3 của mỗi phần tử—được cung cấp, thì chỉ những phần tử mà vị từ trả về giá trị thực mới được đưa vào
Ghi chú
sẽ chỉ trả về các thuộc tính lớp được xác định trong siêu dữ liệu khi đối số là một lớp và các thuộc tính đó đã được liệt kê trong
>>> 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 tùy chỉnh của siêu dữ liệukiểm tra. getmembers_static[đối tượng[ , predicate]]
Trả về tất cả các thành viên của một đối tượng trong danh sách
>>> 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'"2 cặp được sắp xếp theo tên mà không kích hoạt tra cứu động thông qua giao thức mô tả, __getattr__ hoặc __getattribute__. Tùy chọn, chỉ trả lại các thành viên đáp ứng một vị từ nhất định
Ghi chú
có thể không truy xuất được tất cả các thành viên mà getmembers có thể tìm nạp [như các thuộc tính được tạo động] và có thể tìm thấy các thành viên mà getmembers không thể [như các bộ mô tả làm tăng AttributeError]. Nó cũng có thể trả về các đối tượng mô tả thay vì các thành viên thể hiện trong một số trường hợp
Mới trong phiên bản 3. 11
kiểm tra. getmodulename[đường dẫn]Trả về tên của mô-đun được đặt tên theo đường dẫn tệp, không bao gồm tên của các gói kèm theo. Phần mở rộng tệp được kiểm tra đối với tất cả các mục trong. Nếu khớp, thành phần đường dẫn cuối cùng được trả về với phần mở rộng đã bị xóa. Mặt khác,
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7 được trả lại
Lưu ý rằng hàm này chỉ trả về một tên có ý nghĩa cho các mô-đun Python thực tế - các đường dẫn có khả năng tham chiếu đến các gói Python sẽ vẫn trả về
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7
Đã thay đổi trong phiên bản 3. 3. Hàm này dựa trực tiếp vào.
kiểm tra. ismodule[đối tượng]Trả lại
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là một mô-đunkiểm tra. lớp[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là một lớp, cho dù được tạo sẵn hay được tạo bằng mã Pythonkiểm tra. phương thức[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là một phương thức ràng buộc được viết bằng Pythonkiểm tra. hàm[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là một hàm Python, bao gồm các hàm được tạo bởi một biểu thứckiểm tra. hàm isgenerator[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là hàm tạo Python
Đã thay đổi trong phiên bản 3. 8. Các hàm được bọc trong giờ trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu hàm được bọc là hàm tạo Python. kiểm tra. trình tạo[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là bộ tạokiểm tra. hàm iscoroutine[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là a [một hàm được xác định bằng cú pháp]
Mới trong phiên bản 3. 5
Đã thay đổi trong phiên bản 3. 8. Các hàm được bọc trong giờ trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu hàm được bọc là một. kiểm tra. hành trình[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng được tạo bởi một hàm
Mới trong phiên bản 3. 5
kiểm tra. có thể chờ được[đối tượng]Trả lại
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng có thể được sử dụng trong biểu thức
Cũng có thể được sử dụng để phân biệt các coroutine dựa trên trình tạo với các trình tạo thông thường
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
kiểm tra. chức năng isasyncgen[đối tượng]Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là một hàm, ví dụ
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
Mới trong phiên bản 3. 6
Đã thay đổi trong phiên bản 3. 8. Các hàm được bọc trong giờ trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu hàm được bọc là một hàm. kiểm tra. isasyncgen[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng được tạo bởi một hàm
Mới trong phiên bản 3. 6
kiểm tra. lỗi ngược[đối tượng]Trả lại
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là truy nguyênkiểm tra. khung hình[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là khungkiểm tra. mã[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là mãkiểm tra. được tạo sẵn[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là một hàm dựng sẵn hoặc một phương thức dựng sẵn bị ràng buộckiểm tra. ismethodwrapper[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu loại đối tượng là một
Đây là những trường hợp của , chẳng hạn như , và
Mới trong phiên bản 3. 11
kiểm tra. quy trình[đối tượng]Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là hàm hoặc phương thức do người dùng định nghĩa hoặc tích hợp sẵnkiểm tra. là trừu tượng[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là một lớp cơ sở trừu tượngkiểm tra. ismethoddescriptor[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là bộ mô tả phương thức, nhưng không trả về nếu , , hoặc là true
Ví dụ, điều này đúng với
>>> 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'"9. Một đối tượng vượt qua bài kiểm tra này có một phương thức nhưng không phải là một phương thức, ngoài ra, tập hợp các thuộc tính khác nhau. Một thuộc tính thường hợp lý và
>>> def foo[a, b='ham', *args]: pass >>> ba = inspect.signature[foo].bind['spam'] >>> ba.apply_defaults[] >>> ba.arguments {'a': 'spam', 'b': 'ham', 'args': []}3 thường là
Các phương pháp được triển khai thông qua các bộ mô tả cũng vượt qua một trong các bài kiểm tra khác sẽ trả về _______45_______4 từ bài kiểm tra, đơn giản vì các bài kiểm tra khác hứa hẹn nhiều hơn – bạn có thể, e. g. , tin tưởng vào việc có thuộc tính
>>> def foo[a, b='ham', *args]: pass >>> ba = inspect.signature[foo].bind['spam'] >>> ba.apply_defaults[] >>> ba.arguments {'a': 'spam', 'b': 'ham', 'args': []}6 [vv] khi một đối tượng đi quakiểm tra. isdatadescriptor[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là bộ mô tả dữ liệu
Bộ mô tả dữ liệu có một hoặc một phương thức. Ví dụ là các thuộc tính [được định nghĩa bằng Python], getset và thành viên. Hai cái sau được định nghĩa trong C và có nhiều thử nghiệm cụ thể hơn dành cho các loại đó, điều này rất mạnh mẽ trên các triển khai Python. Thông thường, bộ mô tả dữ liệu cũng sẽ có và
>>> def foo[a, b='ham', *args]: pass >>> ba = inspect.signature[foo].bind['spam'] >>> ba.apply_defaults[] >>> ba.arguments {'a': 'spam', 'b': 'ham', 'args': []}3 thuộc tính [thuộc tính, getset và thành viên có cả hai thuộc tính này], nhưng điều này không được đảm bảokiểm tra. isgetsetdescriptor[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là bộ mô tả getset
Chi tiết triển khai CPython. getset là các thuộc tính được xác định trong các mô-đun mở rộng thông qua các cấu trúc. Đối với việc triển khai Python không có các loại như vậy, phương thức này sẽ luôn trả về
>>> def foo[a, b='ham', *args]: pass >>> ba = inspect.signature[foo].bind['spam'] >>> ba.apply_defaults[] >>> ba.arguments {'a': 'spam', 'b': 'ham', 'args': []}4kiểm tra. ismemberdescriptor[đối tượng]
Trả về
class MySignature[Signature]: pass sig = MySignature.from_callable[min] assert isinstance[sig, MySignature]2 nếu đối tượng là bộ mô tả thành viên
Chi tiết triển khai CPython. Các bộ mô tả thành viên là các thuộc tính được định nghĩa trong các mô-đun mở rộng thông qua các cấu trúc. Đối với việc triển khai Python không có các loại như vậy, phương thức này sẽ luôn trả về
>>> def foo[a, b='ham', *args]: pass >>> ba = inspect.signature[foo].bind['spam'] >>> ba.apply_defaults[] >>> ba.arguments {'a': 'spam', 'b': 'ham', 'args': []}4
Truy xuất mã nguồn
kiểm tra. getdoc[đối tượng]Nhận chuỗi tài liệu cho một đối tượng, được làm sạch bằng. Nếu chuỗi tài liệu cho một đối tượng không được cung cấp và đối tượng là một lớp, một phương thức, một thuộc tính hoặc một bộ mô tả, hãy truy xuất chuỗi tài liệu từ hệ thống phân cấp thừa kế. Trả lại
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7 nếu chuỗi tài liệu không hợp lệ hoặc bị thiếu
Đã thay đổi trong phiên bản 3. 5. Chuỗi tài liệu hiện được kế thừa nếu không bị ghi đè.
kiểm tra. nhận bình luận[đối tượng]Trả về một chuỗi bất kỳ dòng nhận xét nào ngay trước mã nguồn của đối tượng [đối với một lớp, hàm hoặc phương thức] hoặc ở đầu tệp nguồn Python [nếu đối tượng là một mô-đun]. Nếu mã nguồn của đối tượng không có sẵn, hãy trả lại
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7. Điều này có thể xảy ra nếu đối tượng đã được xác định trong C hoặc shell tương táckiểm tra. getfile[đối tượng]
Trả về tên của tệp [văn bản hoặc nhị phân] trong đó một đối tượng được xác định. Điều này sẽ thất bại nếu đối tượng là một mô-đun, lớp hoặc hàm tích hợp
kiểm tra. getmodule[đối tượng]Thử đoán đối tượng được xác định trong mô-đun nào. Trả lại
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7 nếu không xác định được mô-đunkiểm tra. getsourcefile[đối tượng]
Trả lại tên của tệp nguồn Python trong đó một đối tượng được xác định hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7 nếu không thể xác định được cách nào để lấy nguồn. Điều này sẽ thất bại nếu đối tượng là một mô-đun, lớp hoặc hàm tích hợpkiểm tra. getsourcelines[đối tượng]
Trả về danh sách các dòng nguồn và số dòng bắt đầu cho một đối tượng. Đối số có thể là một mô-đun, lớp, phương thức, hàm, truy nguyên, khung hoặc đối tượng mã. Mã nguồn được trả về dưới dạng danh sách các dòng tương ứng với đối tượng và số dòng cho biết dòng mã đầu tiên được tìm thấy ở đâu trong tệp nguồn gốc. An được nâng lên nếu không thể truy xuất mã nguồn
Đã thay đổi trong phiên bản 3. 3. được nâng lên thay vì , bây giờ là bí danh của cái cũ.
kiểm tra. lấy nguồn[đối tượng]Trả lại văn bản của mã nguồn cho một đối tượng. Đối số có thể là một mô-đun, lớp, phương thức, hàm, truy nguyên, khung hoặc đối tượng mã. Mã nguồn được trả về dưới dạng một chuỗi. An được nâng lên nếu không thể truy xuất mã nguồn
Đã thay đổi trong phiên bản 3. 3. được nâng lên thay vì , bây giờ là bí danh của cái cũ.
kiểm tra. cleandoc[doc]Dọn dẹp thụt đầu dòng khỏi các chuỗi tài liệu được thụt lề để xếp hàng với các khối mã
Tất cả khoảng trắng hàng đầu được xóa khỏi dòng đầu tiên. Bất kỳ khoảng trắng hàng đầu nào có thể được xóa thống nhất từ dòng thứ hai trở đi đều bị xóa. Các dòng trống ở đầu và cuối sau đó sẽ bị xóa. Ngoài ra, tất cả các tab được mở rộng thành khoảng trắng
Nội quan hóa các cuộc gọi với đối tượng Chữ ký
Mới trong phiên bản 3. 3
Đối tượng Chữ ký đại diện cho chữ ký cuộc gọi của một đối tượng có thể gọi được và chú thích trả về của nó. Để truy xuất một đối tượng Chữ ký, hãy sử dụng chức năng
kiểm tra. chữ ký[có thể gọi được , *, follow_wrapped=True, globals=None, locals=None, eval_str=False]Trả lại một đối tượng cho
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True14 đã cho
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation
Chấp nhận một loạt các lệnh gọi Python, từ các hàm và lớp đơn giản đến các đối tượng
Đố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] True16], sẽ cố gắng tự động hủy xâu chuỗi các chú thích bằng cách sử dụng. Các tham số
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True19,
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True20 và
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True21 được chuyển vào khi giải quyết các chú thích;
Tăng nếu không thể cung cấp chữ ký và 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 hóa và
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True21 không sai, [các] lệnh gọi
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True27 để hủy xâu chuỗi hóa các chú thích có khả năng gây ra bất kỳ loại ngoại lệ nào
Dấu gạch chéo [/] trong chữ ký của hàm biểu thị rằng các tham số trước nó chỉ là vị trí. Để biết thêm thông tin, xem
Mới trong phiên bản 3. 5. ______0_______28 tham số. Vượt qua
>>> def foo[a, b='ham', *args]: pass >>> ba = inspect.signature[foo].bind['spam'] >>> ba.apply_defaults[] >>> ba.arguments {'a': 'spam', 'b': 'ham', 'args': []}4 để nhận được chữ ký cụ thể của
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True14 [
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True31 sẽ không được sử dụng để mở các vật phẩm có thể gọi được trang trí. ]
Mới trong phiên bản 3. 10. ______0_______32,
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True20, và
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True21.
Ghi chú
Một số cuộc gọi có thể không được hướng nội trong một số triển khai nhất định của Python. Ví dụ: trong CPython, một số hàm tích hợp được định nghĩa trong C không cung cấp siêu dữ liệu về các đối số của chúng
lớp kiểm tra. Chữ ký[tham số=Không . trống, *, return_annotation=Signature.empty]Một đối tượng Chữ ký đại diện cho chữ ký cuộc gọi của một hàm và chú thích trả về của nó. Đối với mỗi tham số được hàm chấp nhận, nó lưu trữ một đối tượng trong bộ sưu tập của nó
Đối số tham số tùy chọn là một chuỗi các đối tượng, được xác thực để kiểm tra xem không có tham số nào có tên trùng lặp và các tham số có theo đúng thứ tự không. e. trước tiên chỉ có vị trí, sau đó là vị trí hoặc từ khóa và các tham số có giá trị mặc định theo sau các tham số không có giá trị mặc định
Đối số return_annotation tùy chọn, có thể là một đối tượng Python tùy ý, là chú thích “return” của đối tượng có thể gọi được
Đối tượng chữ ký là bất biến. Sử dụng để tạo một bản sao sửa đổi
Đã thay đổi trong phiên bản 3. 5. Đối tượng chữ ký có thể chọn và có thể băm.
trống rỗngMột điểm đánh dấu cấp lớp đặc biệt để chỉ định không có chú thích trả về
thông sốMột ánh xạ có thứ tự tên của các tham số tới các đối tượng tương ứng. Các tham số xuất hiện theo thứ tự định nghĩa nghiêm ngặt, bao gồm các tham số chỉ từ khóa
Đã thay đổi trong phiên bản 3. 7. Python chỉ đảm bảo rõ ràng rằng nó giữ nguyên thứ tự khai báo của các tham số chỉ từ khóa kể từ phiên bản 3. 7, mặc dù trên thực tế, thứ tự này luôn được giữ nguyên trong Python 3.
return_annotationChú thích “return” cho callable. Nếu callable không có chú thích “return”, thuộc tính này được đặt thành
ràng buộc[*args , **kwargs]Tạo ánh xạ từ các đối số vị trí và từ khóa đến các tham số. Trả về nếu
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True42 và
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True43 khớp với chữ ký hoặc tăngbind_partial[*args , **kwargs]
Hoạt động giống như , nhưng cho phép lược bỏ một số đối số bắt buộc [bắt chước hành vi. ] Trả về hoặc tăng a nếu các đối số đã truyền không khớp với chữ ký
replace[*[, tham số][, return_annotation]]Tạo một phiên bản Chữ ký mới dựa trên phiên bản thay thế đã được gọi trên. Có thể chuyển các
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True36 và/hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True50 khác nhau để ghi đè các thuộc tính tương ứng của chữ ký cơ sở. Để xóa return_annotation khỏi Chữ ký đã sao chép, hãy nhậ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'"classmethod from_callable[obj , *, follow_wrapped=True, globalns=None, localns=None]
Trả về một đối tượng [hoặc lớp con của nó] cho một
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True53 có thể gọi được. Vượt qua
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True54 để nhận chữ ký của
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True53 mà không cần mở chuỗi
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True56 của nó.
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True57 và
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True58 sẽ được sử dụng làm không gian tên khi giải quyết các chú thích
Phương pháp này đơn giản hóa việc phân lớp của
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. ______0_______57 và
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True58 tham số. lớp kiểm tra. Tham số[tên , loại . trống, *, default=Parameter.empty , chú thích=Tham số. trống]
Các đối tượng tham số là bất biến. Thay vì sửa đổi một đối tượng Tham số, bạn có thể sử dụng để tạo một bản sao đã sửa đổi
Đã thay đổi trong phiên bản 3. 5. Các đối tượng tham số có thể chọn và băm được.
trống rỗngMột điểm đánh dấu cấp lớp đặc biệt để chỉ định sự vắng mặt của các giá trị và chú thích mặc định
TênTên của tham số dưới dạng chuỗi. Tên phải là một mã định danh Python hợp lệ
Chi tiết triển khai CPython. CPython tạo các tên tham số ẩn có dạng
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True63 trên các đối tượng mã được sử dụng để thực hiện các biểu thức trình tạo và hiểu
Đã thay đổi trong phiên bản 3. 6. Các tên tham số này được hiển thị bởi mô-đun này dưới dạng các tên như
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True64. vỡ nợ
Giá trị mặc định cho tham số. Nếu tham số không có giá trị mặc định, thuộc tính này được đặt thành
chú thíchChú thích cho tham số. Nếu tham số không có chú thích, thuộc tính này được đặt thành
Tốt bụngMô tả cách các giá trị đối số được liên kết với tham số. Các giá trị có thể [có thể truy cập qua , như
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True68]
Tên
Nghĩa
POSITIONAL_ONLY
Giá trị phải được cung cấp dưới dạng đối số vị trí. Các tham số chỉ vị trí là những tham số xuất hiện trước mục nhập
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True69 [nếu có] trong định nghĩa hàm Python
POSITIONAL_OR_KEYWORD
Giá trị có thể được cung cấp dưới dạng từ khóa hoặc đối số vị trí [đây là hành vi ràng buộc tiêu chuẩn cho các hàm được triển khai trong Python. ]
VAR_POSITIONAL
Một bộ đối số vị trí không bị ràng buộc với bất kỳ tham số nào khác. Điều này tương ứng với tham số
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True42 trong định nghĩa hàm Python
KEYWORD_ONLY
Giá trị phải được cung cấp dưới dạng đối số từ khóa. Tham số chỉ từ khóa là những tham số xuất hiện sau mục nhập
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True71 hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True42 trong định nghĩa hàm Python
VAR_KEYWORD
Một lệnh của các đối số từ khóa không bị ràng buộc với bất kỳ tham số nào khác. Điều này tương ứng với tham số
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True43 trong định nghĩa hàm Python
Thí dụ. in tất cả các đối số chỉ từ khóa không có giá trị mặc định
>>> 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: ctốt bụng. mô tả
Mô tả một giá trị enum của Tham số. Tốt bụng
Mới trong phiên bản 3. 8
Thí dụ. in tất cả các mô tả của đối số
>>> 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-onlythay thế[*[, tên][, kind][, default][, annotation]]
Tạo một phiên bản Tham số mới dựa trên phiên bản được thay thế đã được gọi trên. Để ghi đè một thuộc tính, hãy chuyển đối số tương ứng. Để xóa giá trị mặc định hoặc/và chú thích khỏi Tham số, hãy vượt qua
>>> 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 Python 3. 3 Các đối tượng tham số được phép đặt
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True76 thành
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7 nếu
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True78 của chúng được đặt thành
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True79. Điều này không còn được phép. lớp kiểm tra. Đối số ràng buộc
Kết quả của một cuộc gọi hoặc. Giữ ánh xạ của các đối số tới các tham số của hàm
tranh luậnÁnh xạ có thể thay đổi tên của tham số thành giá trị của đối số. Chỉ chứa các đối số ràng buộc rõ ràng. Những thay đổi trong sẽ phản ánh trong và
Nên được sử dụng cùng với cho bất kỳ mục đích xử lý đối số nào
Ghi chú
Các đối số mà hoặc dựa vào một giá trị mặc định bị bỏ qua. Tuy nhiên, nếu cần, hãy sử dụng để thêm chúng
Đã thay đổi trong phiên bản 3. 9. hiện thuộc loại. Trước đây, nó thuộc loại.
tranh luậnMột bộ giá trị đối số vị trí. Được tính toán động từ thuộc tính
kwargsMột lệnh của các giá trị đối số từ khóa. Được tính toán động từ thuộc tính
Chữ kýMột tham chiếu đến đối tượng cha
apply_defaults[]Đặt giá trị mặc định cho các đối số bị thiếu
Đối với các đối số vị trí biến [_______0_______42], mặc định là một bộ trống
Đối với các đối số từ khóa biến [_______0_______43], mặc định là một lệnh 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 và có thể được sử dụng để gọi các hàm
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ăngThông số kỹ thuật chi tiết, chi tiết triển khai và ví dụ
Các lớp và chức năng
kiểm tra. getclasstree[các lớp , duy nhất=False]Sắp xếp danh sách các lớp đã cho thành một hệ thống phân cấp các danh sách lồng nhau. Khi một danh sách lồng nhau xuất hiện, nó chứa các lớp bắt nguồn từ lớp có mục nhập ngay trước danh sách. Mỗi mục là 2-bộ chứa một lớp và một bộ các lớp cơ sở của nó. Nếu đối số duy nhất là đúng, chính xác một mục xuất hiện trong cấu trúc được trả về cho mỗi lớp trong danh sách đã cho. Nếu không, các lớp sử dụng nhiều kế thừa và lớp con của chúng sẽ xuất hiện nhiều lần
kiểm tra. getfullargspec[func]Lấy tên và giá trị mặc định của các tham số của hàm Python. A được trả lại
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True99
args là danh sách các tên tham số vị trí. varargs là tên của tham số
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True71 hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7 nếu đối số vị trí tùy ý không được chấp nhận. varkw là tên của tham số
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation02 hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7 nếu đối số từ khóa tùy ý không được chấp nhận. giá trị mặc định là n-tuple giá trị đối số mặc định tương ứng với n tham số vị trí cuối cùng hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7 nếu không có giá trị mặc định nào được xác định. kwonlyargs là danh sách các tên tham số chỉ có từ khóa theo thứ tự khai báo. kwOnlydefaults là tên tham số ánh xạ từ điển từ kwonlyargs sang giá trị mặc định được sử dụng nếu không có đối số nào được cung cấp. chú thích là tên tham số ánh xạ từ điển thành chú thích. Phím đặc biệt
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True8 dùng để khai báo chú giải giá trị hàm trả về [nếu có]
Lưu ý rằng và cung cấp API được đề xuất để xem xét nội tâm có thể gọi được và hỗ trợ các hành vi bổ sung [như đối số chỉ vị trí] đôi khi gặp phải trong API mô-đun tiện ích. Chức năng này được giữ lại chủ yếu để sử dụng trong mã cần duy trì khả năng tương thích với API mô-đun Python 2
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True3
Đã thay đổi trong phiên bản 3. 4. Hàm này hiện dựa trên , nhưng vẫn bỏ qua các thuộc tính
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True56 và bao gồm tham số đầu tiên đã được ràng buộc trong đầu ra chữ ký cho các phương thức bị ràng buộc.
Đã thay đổi trong phiên bản 3. 6. Phương pháp này trước đây đã được ghi nhận là không được dùng trong Python 3. 5, nhưng quyết định đó đã bị đảo ngược để khôi phục giao diện tiêu chuẩn được hỗ trợ rõ ràng cho mã Python 2/3 nguồn đơn di chuyển khỏi API
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation11 cũ.
Đã thay đổi trong phiên bản 3. 7. Python chỉ đảm bảo rõ ràng rằng nó giữ nguyên thứ tự khai báo của các tham số chỉ từ khóa kể từ phiên bản 3. 7, mặc dù trên thực tế, thứ tự này luôn được giữ nguyên trong Python 3.
kiểm tra. getargvalues[frame]Nhận thông tin về các đối số được truyền vào một khung cụ thể. Một
>>> 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'].annotation12 được trả lại. args là một danh sách các tên đối số. varargs và từ khóa là tên của các đối số
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True71 và
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation02 hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7. người dân địa phương là từ điển người dân địa phương của khung đã cho
Ghi chú
Chức năng này vô tình được đánh dấu là không dùng nữa trong Python 3. 5
kiểm tra. giá trị định dạng[args[ , varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue]]Định dạng một thông số đối số đẹp từ bốn giá trị được trả về bởi. Các đối số định dạng* là các hàm định dạng tùy chọn tương ứng được gọi để biến tên và giá trị thành chuỗi
Ghi chú
Chức năng này vô tình được đánh dấu là không dùng nữa trong Python 3. 5
kiểm tra. getmro[cls]Trả về một bộ các lớp cơ sở của lớp cls, bao gồm cả cls, theo thứ tự phân giải phương thức. Không có lớp nào xuất hiện nhiều hơn một lần trong bộ dữ liệu này. Lưu ý rằng thứ tự giải quyết phương thức phụ thuộc vào loại của cls. Trừ khi một siêu dữ liệu do người dùng định nghĩa rất đặc biệt được sử dụng, cls sẽ là phần tử đầu tiên của bộ dữ liệu
kiểm tra. getcallargs[func , /, *args, **kwds]Liên kết các đối số và kwds với tên đối số của hàm Python hoặc phương thức func, như thể nó được gọi cùng với chúng. Đối với các phương thức liên kết, cũng liên kết đối số đầu tiên [thường được đặt tên là
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation17] với thể hiện được liên kết. 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ố
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True71 và
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation02, nếu có] với các giá trị của chúng từ args và kwds. Trong trường hợp gọi func không chính xác, tôi. e. bất cứ khi nào
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation20 đưa ra một ngoại lệ do chữ ký không tương thích, một ngoại lệ cùng loại và cùng một thông điệp hoặc tương tự sẽ được đưa ra. Ví dụ
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True0
Mới trong phiên bản 3. 2
Không dùng nữa kể từ phiên bản 3. 5. Sử dụng và thay thế.
kiểm tra. getclosurevars[func]Lấy ánh xạ của các tham chiếu tên bên ngoài trong một hàm Python hoặc phương thức func tới các giá trị hiện tại của chúng. Một
>>> 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'].annotation23 được trả lại. nonlocals ánh xạ các tên được tham chiếu tới các biến đóng từ vựng, toàn cầu tới toàn cục mô-đun của hàm và nội trang tới nội trang có thể nhìn thấy từ thân hàm. không liên kết là tập hợp các tên được tham chiếu trong hàm hoàn toàn không thể giải quyết được với các toàn cầu và nội dung mô-đun hiện tại
được nâng lên nếu func không phải là hàm hoặc phương thức Python
Mới trong phiên bản 3. 3
kiểm tra. mở gói[chức năng , *, stop=None]Lấy đối tượng được bao bọc bởi func. Nó đi theo chuỗi
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True56 thuộc tính trả về đối tượng cuối cùng trong chuỗi
stop là một cuộc gọi lại tùy chọn chấp nhận một đối tượng trong chuỗi trình bao bọc làm đối số duy nhất của nó cho phép kết thúc quá trình hủy gói sớm nếu cuộc gọi lại trả về một giá trị thực. Nếu cuộc gọi lại không bao giờ trả về giá trị thực, đối tượng cuối cùng trong chuỗi sẽ được trả về như bình thường. Ví dụ: sử dụng điều này để dừng mở gói nếu bất kỳ đối tượng nào trong chuỗi có thuộc tính
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation27 được xác định
được nâng lên nếu gặp phải một chu trình
Mới trong phiên bản 3. 4
kiểm tra. get_annotations[obj , *, globals=None, locals=None, eval_str=False]Tính toán các chú thích dict cho một đối tượng
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True53 có thể là một lớp, lớp hoặc mô-đun có thể gọi được. Truyền vào một đối tượng thuộc bất kỳ loại nào khác sẽ tăng
Trả về một lệnh.
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation31 trả về một lệnh mới mỗi khi nó được gọi;
Chức năng này xử lý một số chi tiết cho bạn
Nếu
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
21 là đúng, các giá trị của loại>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation
33 sẽ không được xâu chuỗi bằng cách sử dụng. Điều này được thiết kế để sử dụng với các chú thích được xâu chuỗi [>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
16]Nếu
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
53 không có chính tả chú thích, hãy trả về một chính tả trống. [Các hàm và phương thức luôn có một chú thích chính tả; các lớp, mô-đun và các loại khả năng gọi khác có thể không. ]Bỏ qua các chú thích được kế thừa trên các lớp. Nếu một lớp không có chính tả chú thích riêng, hãy trả về một lệnh trống
Tất cả các truy cập vào các thành viên đối tượng và các giá trị chính tả được thực hiện bằng cách 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
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
38 để đảm bảo an toànLuôn luôn, luôn luôn, luôn luôn trả về một lệnh mới được tạo
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True21 kiểm soát xem các giá trị của loại
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation33 có được thay thế bằng kết quả của việc gọi các giá trị đó hay không
Nếu eval_str là true, được gọi trên các giá trị kiể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
33. [Lưu ý rằ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
44 không bắt ngoại lệ; nếu tăng ngoại lệ, nó sẽ giải phóng ngăn xếp qua lệnh 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
44. ]Nếu eval_str là false [mặc định], các giá trị của loại
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation
33 không thay đổi
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True32 và
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True20 được chuyển vào ; . Nếu
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True32 hoặc
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True20 là
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7, hàm này có thể thay thế giá trị đó bằng giá trị mặc định theo ngữ cảnh cụ thể, tùy thuộc vào
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation55
Nếu
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
53 là một mô-đun, thì>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
32 mặc định 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
58Nếu
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
53 là một lớp, thì>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
32 mặc định 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
61 và>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
20 mặc định là không gian tên lớp ________0____53Nếu
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
53 là một hàm có thể gọi được, thì>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
32 mặc định 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
66, mặc dù nếu>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True
53 là một hàm được bao bọc [sử dụng>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation
68] thì nó sẽ được mở đầu tiên
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'].annotation44 là cách tốt nhất để truy cập vào lệnh chú thích của bất kỳ đối tượng nào. Xem để biết thêm thông tin về các phương pháp hay nhất về chú thích
Mới trong phiên bản 3. 10
Ngăn thông dịch viên
Một số hàm sau trả về đối tượng. Để có khả năng tương thích ngược, các đối tượng này cho phép các thao tác giống bộ trên tất cả các thuộc tính ngoại trừ
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation71. Hành vi này được coi là không dùng nữa và có thể bị xóa trong tương lailớp kiểm tra. FrameInfoframe
Bản ghi đó tương ứng với
tên tập tinTên tệp được liên kết với mã đang được thực thi bởi khung mà bản ghi này tương ứng với
vải lanhSố dòng của dòng hiện tại được liên kết với mã đang được thực thi bởi khung mà bản ghi này tương ứng với
hàm sốTên chức năng đang được thực thi bởi khung bản ghi này tương ứng với
code_contextDanh sách các dòng ngữ cảnh từ mã nguồn đang được thực thi bởi khung mà bản ghi này tương ứng với
mục lụcChỉ mục của dòng hiện tại đang được thực thi trong danh sách
vị tríMột đối tượng chứa số dòng bắt đầu, số dòng kết thúc, phần bù cột bắt đầu và phần bù cột kết thúc được liên kết với lệnh đang được thực thi bởi khung mà bản ghi này tương ứng với
Đã thay đổi trong phiên bản 3. 5. Trả về a thay vì a.
Đã thay đổi trong phiên bản 3. 11. ______3_______70 hiện là một thể hiện của lớp [tương thích ngược với phiên bản trước đó].
lớp kiểm tra. Truy nguyêntên tệpTên tệp được liên kết với mã đang được thực thi bởi khung truy nguyên này tương ứng với
vải lanhSố dòng của dòng hiện tại được liên kết với mã đang được thực thi bởi khung mà lần theo dõi này tương ứng với
hàm sốTên chức năng đang được thực thi bởi khung truy nguyên này tương ứng với
code_contextDanh sách các dòng ngữ cảnh từ mã nguồn đang được thực thi bởi khung mà lần theo dõi này tương ứng với
mục lụcChỉ mục của dòng hiện tại đang được thực thi trong danh sách
vị tríMột đối tượng chứa số dòng bắt đầu, số dòng kết thúc, phần bù cột bắt đầu và phần bù cột kết thúc được liên kết với lệnh đang được thực thi bởi khung mà lần truy nguyên này tương ứng với
Đã thay đổi trong phiên bản 3. 11. ______3_______78 hiện là một thể hiện của lớp [tương thích ngược với phiên bản trước đó].
Ghi chú
Giữ các tham chiếu đến các đối tượng khung, như được tìm thấy trong phần tử đầu tiên của khung ghi lại các hàm này, có thể khiến chương trình của bạn tạo các chu kỳ tham chiếu. Khi một chu trình tham chiếu đã được tạo, tuổi thọ của tất cả các đối tượng có thể được truy cập từ các đối tượng hình thành chu trình có thể dài hơn nhiều ngay cả khi trình phát hiện chu trình tùy chọn của Python được bật. Nếu các chu kỳ như vậy phải được tạo, điều quan trọng là phải đảm bảo rằng chúng bị phá vỡ một cách rõ ràng để tránh việc phá hủy các đối tượng bị trì hoãn và tăng mức tiêu thụ bộ nhớ xảy ra
Mặc dù trình phát hiện chu trình sẽ bắt được những thứ này, nhưng việc phá hủy các khung [và các biến cục bộ] có thể được xác định bằng cách loại bỏ chu trình trong một mệnh đề. Điều này cũng quan trọng nếu trình phát hiện chu kỳ bị tắt khi Python được biên dịch hoặc sử dụng. Ví dụ
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True1
Nếu bạn muốn giữ lại khung xung quanh [ví dụ để in truy nguyên sau này], bạn cũng có thể ngắt các chu kỳ tham chiếu bằng cách sử dụng phương pháp
Đối số ngữ cảnh tùy chọn được hỗ trợ bởi hầu hết các hàm này chỉ định số lượng dòng ngữ cảnh sẽ trả về, được căn giữa xung quanh dòng hiện tại
kiểm tra. getframeinfo[khung , bối cảnh=1]Nhận thông tin về một khung hoặc đối tượng truy nguyên. Một đối tượng được trả lại
Đã thay đổi trong phiên bản 3. 11. Một đối tượng được trả về thay vì một bộ được đặt tên.
kiểm tra. getouterframes[frame , bối cảnh=1]Nhận danh sách các đối tượng cho một khung và tất cả các khung bên ngoài. Các khung này đại diện cho các cuộc gọi dẫn đến việc tạo khung. Mục đầu tiên trong danh sách trả về đại diện cho khung;
Đã thay đổi trong phiên bản 3. 5. Một danh sách
>>> 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'].annotation85 được trả về.
Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng được trả về.
kiểm tra. getinnerframes[truy ngược , bối cảnh=1]Nhận danh sách các đối tượng cho khung truy nguyên và tất cả các khung bên trong. Các khung này đại diện cho các cuộc gọi được thực hiện do kết quả của khung. Mục đầu tiên trong danh sách đại diện cho truy xuất nguồn gốc;
Đã thay đổi trong phiên bản 3. 5. Một danh sách
>>> 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'].annotation85 được trả về.
Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng được trả về.
kiểm tra. khung hình hiện tại[]Trả lại đối tượng khung cho khung ngăn xếp của người gọi
Chi tiết triển khai CPython. Chức năng này dựa trên hỗ trợ khung ngăn xếp Python trong trình thông dịch, không được đảm bảo tồn tại trong tất cả các triển khai của Python. Nếu chạy trong một triển khai không có hỗ trợ khung ngăn xếp Python, hàm này trả về
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True7kiểm tra. ngăn xếp[bối cảnh=1]
Trả về danh sách các đối tượng cho ngăn xếp của người gọi. Mục đầu tiên trong danh sách được trả về đại diện cho người gọi;
Đã thay đổi trong phiên bản 3. 5. Một danh sách
>>> 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'].annotation85 được trả về.
Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng được trả về.
kiểm tra. dấu vết[bối cảnh=1]Trả về danh sách các đối tượng cho ngăn xếp giữa khung hiện tại và khung trong đó một ngoại lệ hiện đang được xử lý đã được đưa ra trong. Mục đầu tiên trong danh sách đại diện cho người gọi;
Đã thay đổi trong phiên bản 3. 5. Một danh sách
>>> 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'].annotation85 được trả về.
Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng được trả về.
Tìm nạp thuộc tính tĩnh
Cả hai và 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 bộ mô tả, giống như các thuộc tính, sẽ được gọi và có thể 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'].annotation99 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'"00
Đối với những trường hợp bạn muốn xem xét nội tâm thụ động, chẳng hạn như các công cụ tài liệu, điều này có thể gây bất tiện. có cùng chữ ký nhưng tránh mã thực thi khi tìm nạp thuộc tính
kiểm tra. getattr_static[obj , attr, default=None]Truy xuất các thuộc tính mà không kích hoạt tra cứu động thông qua giao thức mô tả,
>>> from inspect import signature >>> def foo[a, *, b:int, **kwargs]: .. pass >>> sig = signature[foo] >>> str[sig] '[a, *, b:int, **kwargs]' >>> str[sig.parameters['b']] 'b:int' >>> sig.parameters['b'].annotation99 hoặ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'"00
Ghi chú. chức năng này có thể không truy xuất được tất cả các thuộc tính mà getattr có thể tìm nạp [như các thuộc tính được tạo động] và có thể tìm thấy các thuộc tính mà getattr không thể [như các bộ mô tả làm tăng AttributeError]. Nó cũng có thể trả về các đối tượng mô tả thay vì các thành viên thể hiện
Nếu phiên bản bị che khuất bởi một thành viên khác [ví dụ: một thuộc tính] thì chức năng này sẽ không thể tìm thấy các thành viên của phiên bản
Mới trong phiên bản 3. 2
không giải quyết các bộ mô tả, ví dụ như bộ mô tả vị trí hoặc bộ mô tả getset trên các đối tượng được triển khai trong C. Đối tượng mô tả được trả về thay vì thuộc tính cơ bản
Bạn có thể xử lý chúng bằng mã như sau. Lưu ý rằng đối với các bộ mô tả getset tùy ý, việc gọi chúng có thể kích hoạt thực thi mã
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True2
Trạng thái hiện tại của Trình tạo và Coroutines
Khi triển khai bộ lập lịch coroutine và cho các ứng dụng nâng cao khác của trình tạo, sẽ rất hữu ích khi xác định xem trình tạo hiện đang thực thi, đang chờ để bắt đầu hoặc tiếp tục hoặc thực thi hay đã kết thúc. cho phép xác định trạng thái hiện tại của máy phát một cách dễ dàng
kiểm tra. getgeneratorstate[trình tạo]Nhận trạng thái hiện tại của trình tạo-iterator
Các trạng thái có thể làGEN_CREATED. Chờ đợi để bắt đầu thực hiện
GEN_RUNNING. Hiện đang được thực hiện bởi thông dịch viên
GEN_SUSPENDED. Hiện đang bị đình chỉ tại một biểu thức năng suất
GEN_CLOSED. Thực hiện đã hoàn thành
Mới trong phiên bản 3. 2
kiểm tra. getcoroutinestate[coroutine]Nhận trạng thái hiện tại của một đối tượng coroutine. Chức năng này được thiết kế để sử dụng với các đối tượng coroutine được tạo bởi các hàm, 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
>>> 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 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'"10Các trạng thái có thể là
CORO_CREATED. Chờ đợi để bắt đầu thực hiện
CORO_RUNNING. Hiện đang được thực hiện bởi thông dịch viên
CORO_SUSPENDED. Hiện đang bị đình chỉ tại một biểu thức chờ đợi
CORO_CLOSED. Thực hiện đã hoàn thành
Mới trong phiên bản 3. 5
Trạng thái bên trong hiện tại của trình tạo cũng có thể được truy vấn. Điều này chủ yếu hữu ích cho mục đích thử nghiệm, để đảm bảo rằng trạng thái nội bộ đang được cập nhật như mong đợi
kiểm tra. getgeneratorlocals[trình tạo]Lấy ánh xạ của các biến cục bộ trực tiếp trong trình tạo tới các giá trị hiện tại của chúng. Một từ điển được trả về ánh xạ từ tên biến thành giá trị. Điều này tương đương với việc gọi trong phần thân của trình tạo và áp dụng tất cả các cảnh báo tương tự
Nếu trình tạo không có khung hiện được liên kết, thì một từ điển trống sẽ được trả về. được nâng lên nếu trình tạo không phải là đối tượng trình tạo Python
Chi tiết triển khai CPython. Hàm này dựa vào trình tạo hiển thị khung ngăn xếp Python để xem xét nội tâm, điều này không được đảm bảo là trường hợp trong tất cả các triển khai của Python. Trong những trường hợp như vậy, chức năng này sẽ luôn trả về một từ điển trống
Mới trong phiên bản 3. 3
kiểm tra. getcoroutinelocals[coroutine]Hàm này tương tự như , nhưng hoạt động đối với các đối tượng coroutine được tạo bởi các hàm
Mới trong phiên bản 3. 5
Đối tượng mã Cờ bit
Các đối tượng mã Python có thuộc tính
>>> 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'"15, là một bitmap của các cờ saukiểm tra. CO_OPTIMIZED
Đối tượng mã được tối ưu hóa, sử dụng địa phương nhanh
kiểm tra. CO_NEWLOCALSNếu được đặt, một lệnh mới sẽ được tạo cho khung
>>> 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 khi đối tượng mã được thực thikiểm tra. CO_VAARGS
Đối tượng mã có một tham số vị trí biến [
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True42-like]kiểm tra. CO_VARKEYWORDS
Đối tượng mã có tham số từ khóa biến [
>>> async def agen[]: .. yield 1 ... >>> inspect.isasyncgenfunction[agen] True43-like]kiểm tra. CO_NESTED
Cờ được đặt khi đối tượng mã là một hàm lồng nhau
kiểm tra. CO_GENERATORCờ được đặt khi đối tượng mã là hàm tạo, tôi. e. một đối tượng trình tạo được trả về khi đối tượng mã được thực thi
kiểm tra. CO_COROUTINECờ được đặt khi đối tượng mã là một hàm coroutine. Khi đối tượng mã được thực thi, nó trả về một đối tượng coroutine. Xem PEP 492 để biết thêm chi tiết
Mới trong phiên bản 3. 5
kiểm tra. CO_ITERABLE_COROUTINECờ được sử dụng để chuyển đổi trình tạo thành coroutines dựa trên trình tạo. Các đối tượng trình tạo có cờ này có thể được sử dụng trong biểu thức
>>> 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: c7 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'].annotation1 đối tượng coroutine. Xem PEP 492 để biết thêm chi tiết
Mới trong phiên bản 3. 5
kiểm tra. CO_ASYNC_GENERATORCờ được đặt khi đối tượng mã là hàm tạo không đồng bộ. Khi đối tượng mã được thực thi, nó trả về một đối tượng trình tạo không đồng bộ. Xem PEP 525 để biết thêm chi tiết
Mới trong phiên bản 3. 6
Ghi chú
Các cờ dành riêng cho CPython và có thể không được xác định trong các triển khai Python khác. Hơn nữa, các cờ là một chi tiết triển khai và có thể bị xóa hoặc không dùng nữa trong các bản phát hành Python trong tương lai. Bạn nên sử dụng API công khai từ mô-đun cho bất kỳ nhu cầu nội quan nào
Giao diện dòng lệnh
Mô-đun này cũng cung cấp khả năng hướng nội cơ bản từ dòng lệnh
Theo mặc định, chấp nhận tên của mô-đun và in mã nguồn của mô-đun đó. Thay vào đó, một lớp hoặc chức năng trong mô-đun có thể được in bằng cách thêm dấu hai chấm và tên đủ điều kiện của đối tượng đích