Bạn có thể ghi đè lên một đối tượng trong Python không?

Mô-đun

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

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
5 truy xuất các thành viên của đối tượng như lớp hoặc mô-đun. Các hàm có tên bắt đầu bằng “is” chủ yếu được cung cấp dưới dạng các lựa chọn thuận tiện cho đối số thứ hai của
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
5. Chúng cũng giúp bạn xác định thời điểm bạn có thể mong đợi tìm thấy các thuộc tính đặc biệt sau (xem Các thuộc tính mô-đun liên quan đến nhập để biết các thuộc tính mô-đun).

Loại

Thuộc tính

Sự miêu tả

tầng lớp

__doc__

chuỗi tài liệu

__Tên__

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

__tên số lượng__

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

__mô-đun__

tên của mô-đun trong đó lớp này được định nghĩa

phương pháp

__doc__

chuỗi tài liệu

__Tên__

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

__tên số lượng__

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

__func__

đối tượng hàm chứa việc thực hiện phương thức

__bản thân__

trường hợp mà phương pháp này bị ràng buộc, hoặc

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7

__mô-đun__

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

hàm số

__doc__

chuỗi tài liệu

__Tên__

tên mà chức năng này đã được xác định

__tên số lượng__

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

__mã số__

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

__mặc định__

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

__kwdefaults__

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

__globals__

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

__xây dựng__

không gian tên dựng sẵn

__chú thích__

ánh xạ tên tham số thành chú thích;

__mô-đun__

tên của mô-đun trong đó chức năng này được xác định

tìm lại

tb_frame

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

tb_lasti

chỉ mục của lệnh được thử lần cuối trong mã byte

tb_lineno

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

tb_next

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

khung

f_back

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

f_buildins

không gian tên dựng sẵn được nhìn thấy bởi khung này

f_code

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

f_globals

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

f_lasti

chỉ mục của lệnh được thử lần cuối trong mã byte

f_lineno

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

f_locals

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

f_trace

chức năng theo dõi cho khung này, hoặc

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7

mã số

co_argcount

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

co_code

chuỗi mã byte được biên dịch thô

co_cellvars

bộ tên của các biến ô (được tham chiếu bằng cách chứa phạm vi)

co_consts

bộ hằng số được sử dụng trong mã byte

co_filename

tên của tệp trong đó đối tượng mã này được tạo

co_firstlineno

số dòng đầu tiên trong mã nguồn Python

co_flags

bitmap của

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
0 cờ, đọc thêm tại đây

co_lnotab

ánh xạ được mã hóa của số dòng thành các chỉ số mã byte

co_freevars

bộ tên của các biến tự do (được tham chiếu thông qua bao đóng của hàm)

co_posonlyargcount

số đối số chỉ vị trí

co_kwwonargcount

số đối số chỉ từ khóa (không bao gồm ** arg)

co_name

tên mà đối tượng mã này đã được xác định

co_qualname

tên đủ điều kiện mà đối tượng mã này đã được xác định

co_names

bộ tên khác với đối số và hàm cục bộ

co_nlocals

số biến cục bộ

co_stacksize

yêu cầu không gian ngăn xếp máy ảo

co_varnames

bộ tên của các đối số và các biến cục bộ

máy phát điện

__Tên__

Tên

__tên số lượng__

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

gi_frame

khung

gi_running

máy phát điện có chạy không?

gi_code

mã số

gi_yieldfrom

đối tượng được lặp bởi

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
1, hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7

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

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)
True
7. Xem
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
5

được xây dựng trong

__doc__

chuỗi tài liệu

__Tên__

tên gốc của hàm hoặc phương thức này

__tên số lượng__

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

__bản thân__

trường hợp mà một phương thức bị ràng buộc, hoặc

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7

Đã thay đổi trong phiên bản 3. 5. Thêm thuộc tính

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
7 và
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
8 vào bộ tạo.

Thuộc tính

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
9 của các trình tạo hiện được đặt từ tên hàm, thay vì tên mã và giờ đây nó có thể được sửa đổi

Đã thay đổi trong phiên bản 3. 7. Thêm thuộc tính

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
60 vào coroutines.

Đã thay đổi trong phiên bản 3. 10. Thêm thuộc tính

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
61 vào hàm.

kiểm tra. nhận thành viên(đối tượng[ , predicate])

Trả về tất cả các thành viên của một đối tượng trong danh sách

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
62 cặp được sắp xếp theo tên. Nếu đối số vị từ tùy chọn—sẽ được gọi với đối tượng
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
63 của mỗi phần tử—được cung cấp, thì chỉ những phần tử mà vị từ trả về giá trị thực mới được đưa vào

Ghi chú

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
5 sẽ chỉ trả về các thuộc tính lớp được xác định trong siêu dữ liệu khi đối số là một lớp và các thuộc tính đó đã được liệt kê trong
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
65 tùy chỉnh của siêu dữ liệu

kiểm tra. getmembers_static(đối tượng[ , predicate])

Trả về tất cả các thành viên của một đối tượng trong danh sách gồm các cặp

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
62 được sắp xếp theo tên mà không kích hoạt tra cứu động thông qua giao thức mô tả, __getattr__ hoặc __getattribute__. Tùy chọn, chỉ trả lại các thành viên đáp ứng một vị từ nhất định

Ghi chú

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
67 có thể không truy xuất được tất cả các thành viên mà getmembers có thể tìm nạp (như các thuộc tính được tạo động) và có thể tìm thấy các thành viên mà getmembers không thể (như các bộ mô tả làm tăng AttributeError). Nó cũng có thể trả về các đối tượng mô tả thay vì các thành viên thể hiện trong một số trường hợp

Mới trong phiên bản 3. 11

kiểm tra. getmodulename(đường dẫn)

Trả về tên của mô-đun được đặt tên theo đường dẫn tệp, không bao gồm tên của các gói kèm theo. Phần mở rộng tệp được kiểm tra đối với tất cả các mục trong

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
68. 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)
True
7 được trả về

Lưu ý rằng hàm này chỉ trả về một tên có ý nghĩa cho các mô-đun Python thực - các đường dẫn có khả năng tham chiếu đến các gói Python sẽ vẫn trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7

Đã thay đổi trong phiên bản 3. 3. Hàm này dựa trực tiếp vào

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
71.

kiểm tra. ismodule(đối tượng)

Trả lại

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là một mô-đun

kiểm tra. lớp(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là một lớp, cho dù được tạo sẵn hay được tạo bằng mã Python

kiểm tra. phương thức(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là một phương thức ràng buộc được viết bằng Python

kiểm tra. hàm(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là một hàm Python, bao gồm các hàm được tạo bởi biểu thức lambda .

kiểm tra. hàm phát sinh(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là hàm tạo Python

Đã thay đổi trong phiên bản 3. 8. Các hàm được bọc trong

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
77 hiện trả về
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu hàm được bọc là một hàm tạo Python.

kiểm tra. trình tạo(đối tượng)

Trả lại

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là trình tạo

kiểm tra. hàm iscoroutine(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là một hàm coroutine (một hàm được xác định bằng cú pháp
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
71).

Mới trong phiên bản 3. 5

Đã thay đổi trong phiên bản 3. 8. Các hàm được bọc trong

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
77 hiện trả về
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu hàm được bọc là một hàm coroutine .

kiểm tra. hành trình(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là coroutine được tạo bởi hàm
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
71.

Mới trong phiên bản 3. 5

kiểm tra. có thể chờ được(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng có thể được sử dụng trong biểu thức
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
77

Cũng có thể được sử dụng để phân biệt các coroutine dựa trên trình tạo với các trình tạo thông thường

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
4

Mới trong phiên bản 3. 5

kiểm tra. chức năng isasyncgen(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là một hàm trình tạo không đồng bộ , chẳng hạn.

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True

Mới trong phiên bản 3. 6

Đã thay đổi trong phiên bản 3. 8. Các hàm được bọc trong

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
77 hiện trả về
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu hàm được bọc là một hàm tạo không đồng bộ .

kiểm tra. isasyncgen(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là một trình lặp trình tạo không đồng bộ được tạo bởi một trình tạo không đồng bộ function.

Mới trong phiên bản 3. 6

kiểm tra. lỗi ngược(đối tượng)

Trả lại

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là truy nguyên

kiểm tra. isframe(đối tượng)

Trả lại

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là khung

kiểm tra. (đối tượng)

Trả lại

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là mã

kiểm tra. được tạo sẵn(đối tượng)

Trả về

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

kiểm tra. ismethodwrapper(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu loại đối tượng là
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
57

Đây là các phiên bản của

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
57, chẳng hạn như
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
59,
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
80 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
81

Mới trong phiên bản 3. 11

kiểm tra. quy trình(đối tượng)

Trả về

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

kiểm tra. trừu tượng(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là một lớp cơ sở trừu tượng

kiểm tra. ismethoddescriptor(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là bộ mô tả phương thức, nhưng không trả về nếu
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
85,
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
86,
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
87 hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
88 là đúng

Ví dụ, điều này đúng với

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
89. Một đối tượng vượt qua bài kiểm tra này có phương thức
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
80 nhưng không phải phương thức
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
81, ngoài ra, tập hợp các thuộc tính khác nhau. Thuộc tính
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
9 thường hợp lý và
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
83 thường là

Các phương pháp được triển khai thông qua các bộ mô tả cũng vượt qua một trong các bài kiểm tra khác trả về

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
84 từ bài kiểm tra
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
85, đơn giản vì các bài kiểm tra khác hứa hẹn nhiều hơn – bạn có thể, e. g. , tin tưởng vào việc có thuộc tính
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
86 (vv) khi một đối tượng vượt qua
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
85

kiểm tra. isdatadescriptor(đối tượng)

Trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là bộ mô tả dữ liệu

Bộ mô tả dữ liệu có phương thức

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
89 hoặc
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
80. Ví dụ là các thuộc tính (được định nghĩa bằng Python), getset và thành viên. Hai cái sau được định nghĩa trong C và có nhiều thử nghiệm cụ thể hơn dành cho các loại đó, điều này rất mạnh mẽ trên các triển khai Python. Thông thường, bộ mô tả dữ liệu cũng sẽ có các thuộc tính
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
9 và
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
83 (thuộc tính, getset và thành viên có cả hai thuộc tính này), nhưng điều này không được đảm bảo

kiểm tra. isgetsetdescriptor(đối tượng)

Trả lại

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là bộ mô tả getset

Chi tiết triển khai CPython. getset là các thuộc tính được xác định trong các mô-đun mở rộng thông qua cấu trúc

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
84. Đối với việc triển khai Python không có các kiểu như vậy, phương thức này sẽ luôn trả về
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
84

kiểm tra. ismemberdescriptor(đối tượng)

Trả lại

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
72 nếu đối tượng là bộ mô tả thành viên

Chi tiết triển khai CPython. Bộ mô tả thành viên là các thuộc tính được xác định trong các mô-đun mở rộng thông qua cấu trúc

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
87. Đối với việc triển khai Python không có các kiểu như vậy, phương thức này sẽ luôn trả về
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
84

Truy xuất mã nguồn¶

kiểm tra. getdoc(đối tượng)

Nhận chuỗi tài liệu cho một đối tượng, được làm sạch bằng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
89. Nếu chuỗi tài liệu cho một đối tượng không được cung cấp và đối tượng là một lớp, một phương thức, một thuộc tính hoặc một bộ mô tả, hãy truy xuất chuỗi tài liệu từ hệ thống phân cấp thừa kế. Trả lại
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
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. 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)
True
7. Đ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ác

kiểm tra. getfile(đối tượng)

Trả về tên của tệp (văn bản hoặc nhị phân) trong đó một đối tượng được xác định. Điều này sẽ thất bại với một

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
02 nếu đối tượng là một mô-đun, lớp hoặc chức năng tích hợp sẵn

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)
True
7 nếu không xác định được mô-đun

kiể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)
True
7 nếu không thể xác định được cách nào để lấy nguồn. Điều này sẽ thất bại với một
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
02 nếu đối tượng là một mô-đun, lớp hoặc chức năng tích hợp sẵn

kiểm tra. getsourcelines(đối tượng)

Trả về danh sách các dòng nguồn và số dòng bắt đầu cho một đối tượng. Đối số có thể là một mô-đun, lớp, phương thức, hàm, truy nguyên, khung hoặc đối tượng mã. Mã nguồn được trả về dưới dạng danh sách các dòng tương ứng với đối tượng và số dòng cho biết dòng mã đầu tiên được tìm thấy ở đâu trong tệp nguồn gốc. Một

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
06 được nâng lên nếu không thể truy xuất mã nguồn

Đã thay đổi trong phiên bản 3. 3. ______006 được nâng lên thay vì

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
08, hiện là bí danh của cái cũ.

kiểm tra. lấy nguồn(đối tượng)

Trả lại văn bản của mã nguồn cho một đối tượng. Đối số có thể là một mô-đun, lớp, phương thức, hàm, truy nguyên, khung hoặc đối tượng mã. Mã nguồn được trả về dưới dạng một chuỗi. Một

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
06 được nâng lên nếu không thể truy xuất mã nguồn

Đã thay đổi trong phiên bản 3. 3. ______006 được nâng lên thay vì

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
08, hiện là bí danh của cái cũ.

kiểm tra. cleandoc(doc)

Dọn dẹp thụt đầu dòng khỏi các chuỗi tài liệu được thụt lề để xếp hàng với các khối mã

Tất cả khoảng trắng hàng đầu được xóa khỏi dòng đầu tiên. Bất kỳ khoảng trắng hàng đầu nào có thể được xóa thống nhất từ ​​dòng thứ hai trở đi đều bị xóa. Các dòng trống ở đầu và cuối sau đó sẽ bị xóa. Ngoài ra, tất cả các tab được mở rộng thành khoảng trắng

Nội quan hóa các cuộc gọi với đối tượng Chữ ký¶

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

Đối tượng Chữ ký đại diện cho chữ ký cuộc gọi của một đối tượng có thể gọi được và chú thích trả về của nó. Để truy xuất một đối tượng Chữ ký, hãy sử dụng hàm

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
12

kiểm tra. chữ ký(có thể gọi được , *, follow_wrapped=True, globals=None, locals=None, eval_str=False)

Trả về một đối tượng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
13 cho
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
14 đã cho

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>

Chấp nhận một loạt các lệnh gọi Python, từ các hàm và lớp đơn giản đến các đối tượng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
77

Đối với các đối tượng được xác định trong mô-đun bằng cách sử dụng chú thích được xâu chuỗi (

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
16),
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
12 sẽ cố gắng tự động hủy xâu chuỗi các chú thích bằng cách sử dụng
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
18. Các tham số
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
19,
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
20 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
21 được chuyển vào
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
18 khi giải quyết các chú thích;

Tăng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
24 nếu không thể cung cấp chữ ký và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
02 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
21 không sai, (các) lệnh gọi
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
27 để hủy xâu chuỗi các chú thích có khả năng gây ra bất kỳ loại ngoại lệ nào

Dấu gạch chéo (/) trong chữ ký của hàm biểu thị rằng các tham số trước nó chỉ là vị trí. Để biết thêm thông tin, hãy xem mục Câu hỏi thường gặp về thông số chỉ vị trí .

Mới trong phiên bản 3. 5. ______028 tham số. Vượt qua

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
84 để nhận chữ ký cụ thể của
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
14 (
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
31 sẽ không được sử dụng để mở các vật phẩm có thể gọi được trang trí. )

Mới trong phiên bản 3. 10. ______032,

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
20, và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
21 tham số.

Ghi chú

Một số cuộc gọi có thể không được hướng nội trong một số triển khai nhất định của Python. Ví dụ: trong CPython, một số hàm tích hợp được định nghĩa trong C không cung cấp siêu dữ liệu về các đối số của chúng

lớp kiểm tra. Chữ ký(tham số=Không . trống, *, return_annotation=Signature.empty)

Một đối tượng Chữ ký đại diện cho chữ ký cuộc gọi của một hàm và chú thích trả về của nó. Đối với mỗi tham số được hàm chấp nhận, nó lưu trữ một đối tượng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
35 trong bộ sưu tập
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
36 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
35, được xác thực để kiểm tra xem không có tham số nào có tên trùng lặp và các tham số có theo đúng thứ tự không. e. trước tiên chỉ có vị trí, sau đó là vị trí hoặc từ khóa và các tham số có giá trị mặc định theo sau các tham số không có giá trị mặc định

Đối số return_annotation tùy chọn, có thể là một đối tượng Python tùy ý, là chú thích “return” của đối tượng có thể gọi được

Đối tượng chữ ký là bất biến. Sử dụng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
38 để tạo một bản sao đã sửa đổi

Đã thay đổi trong phiên bản 3. 5. Đối tượng chữ ký có thể chọn và có thể băm.

trống

Một điểm đánh dấu cấp lớp đặc biệt để chỉ định không có chú thích trả về

tham số

Ánh xạ theo thứ tự tên của các tham số tới các đối tượng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
35 tương ứng. Các tham số xuất hiện theo thứ tự định nghĩa nghiêm ngặt, bao gồm các tham số chỉ từ khóa

Đã thay đổi trong phiên bản 3. 7. Python chỉ đảm bảo rõ ràng rằng nó giữ nguyên thứ tự khai báo của các tham số chỉ từ khóa kể từ phiên bản 3. 7, mặc dù trên thực tế, thứ tự này luôn được giữ nguyên trong Python 3.

return_annotation

Chú thích “return” cho callable. Nếu callable không có chú thích “return”, thuộc tính này được đặt thành

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
40

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ề

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
41 nếu
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
42 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
43 khớp với chữ ký hoặc tăng
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
02

bind_partial(*args , **kwargs)

Hoạt động tương tự như

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
45, nhưng cho phép lược bỏ một số đối số bắt buộc (bắt chước hành vi của
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
77. ) Trả về
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
41 hoặc tăng
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
02 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)
True
36 và/hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
50 khác nhau để ghi đè các thuộc tính tương ứng của chữ ký cơ sở. Để xóa return_annotation khỏi Chữ ký đã sao chép, hãy chuyển vào
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
40

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
6

classmethod from_callable(obj , *, follow_wrapped=True, globalns=None, localns=None)

Trả về một đối tượng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
13 (hoặc lớp con của nó) cho một
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
53 có thể gọi được. Vượt qua
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
54 để nhận chữ ký của
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
53 mà không cần mở chuỗi
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
56 của nó.
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
57 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
58 sẽ được sử dụng làm không gian tên khi giải quyết các chú thích

Phương pháp này đơn giản hóa việc phân lớp của

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
13

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7

Mới trong phiên bản 3. 5

Mới trong phiên bản 3. 10. ______057 và

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
58 tham số.

lớp kiểm tra. Tham số(tên , loại . trống, *, default=Parameter.empty , chú thích=Tham số. trống)

Các đối tượng tham số là bất biến. Thay vì sửa đổi một đối tượng Tham số, bạn có thể sử dụng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
62 để tạo một bản sao đã sửa đổi

Đã thay đổi trong phiên bản 3. 5. Các đối tượng tham số có thể chọn và băm được.

trống

Một điểm đánh dấu cấp lớp đặc biệt để chỉ định sự vắng mặt của các giá trị và chú thích mặc định

tên

Tên của tham số dưới dạng chuỗi. Tên phải là một mã định danh Python hợp lệ

Chi tiết triển khai CPython. CPython tạo các tên tham số ẩn có dạng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
63 trên các đối tượng mã được sử dụng để triển khai các biểu thức trình tạo và hiểu

Đã thay đổi trong phiên bản 3. 6. Các tên tham số này được hiển thị bởi mô-đun này dưới dạng các tên như

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
64.

mặc định

Giá trị mặc định cho tham số. Nếu tham số không có giá trị mặc định, thuộc tính này được đặt thành

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
65

chú thích

Chú thích cho tham số. Nếu tham số không có chú thích, thuộc tính này được đặt thành

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
65

tử tế

Mô tả cách các giá trị đối số được liên kết với tham số. Các giá trị có thể (có thể truy cập qua

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
35, như
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
68)

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)
True
69 (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)
True
42 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)
True
71 hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
42 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)
True
43 trong định nghĩa hàm Python

Thí dụ. in tất cả các đối số chỉ từ khóa không có giá trị mặc định

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7

tốt bụng. mô tả

Mô tả một giá trị enum của Tham số. Tốt bụng

Mới trong phiên bản 3. 8

Thí dụ. in tất cả các mô tả của đối số

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
5

thay thế(*[, tên][, kind][, default][, annotation])

Tạo một phiên bản Tham số mới dựa trên phiên bản được thay thế đã được gọi trên. Để ghi đè thuộc tính

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
35, hãy chuyển đối số tương ứng. Để xóa giá trị mặc định hoặc/và chú thích khỏi Tham số, hãy vượt qua
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
65

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
8

Đã 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)
True
76 thành
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7 nếu
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
78 của chúng được đặt thành
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
79. Điều này không còn được phép.

lớp kiểm tra. Đối số ràng buộc

Kết quả của một cuộc gọi

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
45 hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
81. Giữ ánh xạ của các đối số tới các tham số của hàm

đối số

Ánh xạ có thể thay đổi tên của tham số thành giá trị của đối số. Chỉ chứa các đối số ràng buộc rõ ràng. Những thay đổi trong

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
82 sẽ phản ánh trong
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
83 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
84

Nên được sử dụng cùng với

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
85 cho bất kỳ mục đích xử lý đối số nào

Ghi chú

Các đối số mà

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
45 hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
81 dựa vào giá trị mặc định sẽ bị bỏ qua. Tuy nhiên, nếu cần, hãy sử dụng
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
88 để thêm chúng

Đã thay đổi trong phiên bản 3. 9. ______082 hiện thuộc loại

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
90. Trước đây, nó thuộc loại
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
91.

args

Một bộ giá trị đối số vị trí. Được tính toán động từ thuộc tính

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
82

kwargs

Một lệnh của các giá trị đối số từ khóa. Được tính toán động từ thuộc tính

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
82

chữ ký

Tham chiếu đến đối tượng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
13 gốc

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 (_______042), mặc định là một bộ trống

Đối với các đối số từ khóa biến (

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
43), mặc định là một lệnh trống

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
8

Mới trong phiên bản 3. 5

Các thuộc tính

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
83 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
84 có thể được sử dụng để gọi các hàm

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
8

Xem thêm

PEP 362 - Đối tượng chữ ký chức năng

Thông số kỹ thuật chi tiết, chi tiết triển khai và ví dụ

Lớp và hàm¶

kiểm tra. getclasstree(các lớp , duy nhất=False)

Sắp xếp danh sách các lớp đã cho thành một hệ thống phân cấp các danh sách lồng nhau. Khi một danh sách lồng nhau xuất hiện, nó chứa các lớp bắt nguồn từ lớp có mục nhập ngay trước danh sách. Mỗi mục là 2-bộ chứa một lớp và một bộ các lớp cơ sở của nó. Nếu đối số duy nhất là đúng, chính xác một mục xuất hiện trong cấu trúc được trả về cho mỗi lớp trong danh sách đã cho. Nếu không, các lớp sử dụng nhiều kế thừa và lớp con của chúng sẽ xuất hiện nhiều lần

kiểm tra. getfullargspec(func)

Lấy tên và giá trị mặc định của các tham số của hàm Python. Một tuple có tên được trả về.

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
99

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)
True
71 hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7 nếu đối số vị trí tùy ý không được chấp nhận. varkw là tên của tham số
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
02 hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7 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)
True
7 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)
True
8 dùng để khai báo chú giải giá trị hàm trả về (nếu có)

Lưu ý rằng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
12 và Đối tượng chữ ký cung cấp API được đề xuất để xem xét nội tâm có thể gọi được và hỗ trợ các hành vi bổ sung (như đối số chỉ vị trí) . Chức năng này được giữ lại chủ yếu để sử dụng trong mã cần duy trì khả năng tương thích với API mô-đun Python 2
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
3.

Đã 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
12, nhưng vẫn bỏ qua các thuộc tính của
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
56 và bao gồm tham số đầu tiên đã được ràng buộc trong đầu ra chữ ký cho các phương thức bị ràng buộc.

Đã thay đổi trong phiên bản 3. 6. Phương pháp này trước đây đã được ghi nhận là không dùng nữa để thay thế cho

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
12 trong Python 3. 5, nhưng quyết định đó đã bị đảo ngược để khôi phục giao diện tiêu chuẩn được hỗ trợ rõ ràng cho mã Python 2/3 nguồn đơn di chuyển khỏi API
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
11 cũ.

Đã thay đổi trong phiên bản 3. 7. Python chỉ đảm bảo rõ ràng rằng nó giữ nguyên thứ tự khai báo của các tham số chỉ từ khóa kể từ phiên bản 3. 7, mặc dù trên thực tế, thứ tự này luôn được giữ nguyên trong Python 3.

kiểm tra. getargvalues(frame)

Nhận thông tin về các đối số được truyền vào một khung cụ thể. Một tuple được đặt tên

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
12 được trả về. args là một danh sách các tên đối số. varargs và từ khóa là tên của các đối số
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
71 và
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
02 hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7. người dân địa phương là từ điển người dân địa phương của khung đã cho.

Ghi chú

Chức năng này vô tình được đánh dấu là không dùng nữa trong Python 3. 5

kiểm tra. giá trị định dạng(args[ , varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue])

Định dạng một thông số đối số đẹp từ bốn giá trị được trả về bởi

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
16. Các đối số định dạng* là các hàm định dạng tùy chọn tương ứng được gọi để biến tên và giá trị thành chuỗi

Ghi chú

Chức năng này vô tình được đánh dấu là không dùng nữa trong Python 3. 5

kiểm tra. getmro(cls)

Trả về một bộ các lớp cơ sở của lớp cls, bao gồm cả cls, theo thứ tự phân giải phương thức. Không có lớp nào xuất hiện nhiều hơn một lần trong bộ dữ liệu này. Lưu ý rằng thứ tự giải quyết phương thức phụ thuộc vào loại của cls. Trừ khi một siêu dữ liệu do người dùng định nghĩa rất đặc biệt được sử dụng, cls sẽ là phần tử đầu tiên của bộ dữ liệu

kiểm tra. getcallargs(func , /, *args, **kwds)

Liên kết các đối số và kwds với tên đối số của hàm Python hoặc phương thức func, như thể nó được gọi cùng với chúng. Đối với các phương thức liên kết, cũng liên kết đối số đầu tiên (thường được đặt tên là

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
17) với thể hiện được liên kết. Một lệnh được trả về, ánh xạ tên đối số (bao gồm tên của đối số
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
71 và
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
02, nếu có) với giá trị của chúng từ args và kwds. Trong trường hợp gọi func không chính xác, tôi. e. bất cứ khi nào
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
20 đưa ra một ngoại lệ do chữ ký không tương thích, một ngoại lệ cùng loại và thông báo giống hoặc tương tự sẽ được đưa ra. Ví dụ

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
0

Mới trong phiên bản 3. 2

Không dùng nữa kể từ phiên bản 3. 5. Sử dụng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
45 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
81 thay thế.

kiểm tra. getclosurevars(func)

Lấy ánh xạ của các tham chiếu tên bên ngoài trong hàm Python hoặc phương thức func tới các giá trị hiện tại của chúng. Một tuple được đặt tên

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
23 được trả về. nonlocals ánh xạ các tên được tham chiếu tới các biến đóng từ vựng, toàn cầu tới toàn cục mô-đun của hàm và nội trang tới nội trang có thể nhìn thấy từ thân hàm. không liên kết là tập hợp các tên được tham chiếu trong hàm hoàn toàn không thể giải quyết được với các toàn cầu và nội dung mô-đun hiện tại.

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
02 được nâng lên nếu func không phải là hàm hoặc phương thức Python

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

kiểm tra. mở gói(chức năng , *, stop=None)

Lấy đối tượng được bao bọc bởi func. Nó tuân theo chuỗi thuộc tính

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
56 trả về đối tượng cuối cùng trong chuỗi

stop là một cuộc gọi lại tùy chọn chấp nhận một đối tượng trong chuỗi trình bao bọc làm đối số duy nhất của nó cho phép kết thúc quá trình hủy gói sớm nếu cuộc gọi lại trả về một giá trị thực. Nếu cuộc gọi lại không bao giờ trả về giá trị thực, đối tượng cuối cùng trong chuỗi sẽ được trả về như bình thường. Ví dụ:

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
12 sử dụng điều này để dừng mở gói nếu bất kỳ đối tượng nào trong chuỗi có thuộc tính
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
27 được xác định

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
24 được nâng lên nếu gặp chu trình

Mới trong phiên bản 3. 4

kiểm tra. get_annotations(obj , *, globals=None, locals=None, eval_str=False)

Tính toán các chú thích dict cho một đối tượng

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
53 có thể là một lớp, lớp hoặc mô-đun có thể gọi được. Truyền vào một đối tượng thuộc bất kỳ loại nào khác làm tăng
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
02

Trả về một lệnh.

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
31 trả về một lệnh mới mỗi khi nó được gọi;

Chức năng này xử lý một số chi tiết cho bạn

  • 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
    <class 'int'>
    
    33 sẽ không được xâu chuỗi bằng cách sử dụng
    >>> async def agen():
    ..     yield 1
    ...
    >>> inspect.isasyncgenfunction(agen)
    True
    
    27. Đ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ó lệnh chú thích, trả về một lệnh 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à 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
    <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'>
    
    38 để đảm bảo an toàn

  • Luô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)
True
21 kiểm soát xem các giá trị của loại
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
33 có được thay thế hay không bằng kết quả của việc gọi
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
27 trên các giá trị đó

  • Nếu eval_str là true, thì

    >>> async def agen():
    ..     yield 1
    ...
    >>> inspect.isasyncgenfunction(agen)
    True
    
    27 đượ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
    <class 'int'>
    
    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
    <class 'int'>
    
    44 không bắt ngoại lệ; nếu
    >>> async def agen():
    ..     yield 1
    ...
    >>> inspect.isasyncgenfunction(agen)
    True
    
    27 đưa ra một 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
    <class 'int'>
    
    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
    <class 'int'>
    
    33 không thay đổi

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
32 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
20 được chuyển cho
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
27; . Nếu
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
32 hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
20 là
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7, hàm này có thể thay thế giá trị đó bằng giá trị mặc định theo ngữ cảnh cụ thể, tùy thuộc vào
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
55

  • 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
    <class 'int'>
    
    58

  • Nế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
    <class 'int'>
    
    61 và
    >>> async def agen():
    ..     yield 1
    ...
    >>> inspect.isasyncgenfunction(agen)
    True
    
    20 mặc định là không gian tên của lớp
    >>> async def agen():
    ..     yield 1
    ...
    >>> inspect.isasyncgenfunction(agen)
    True
    
    53

  • Nế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
    <class 'int'>
    
    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
    <class 'int'>
    
    68) thì trước tiên nó sẽ được mở ra

Gọi

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
44 là phương pháp hay nhất để truy cập chính tả chú thích của bất kỳ đối tượng nào. Xem Các phương pháp hay nhất về chú thích để biết thêm thông tin về các phương pháp hay nhất về chú thích.

Mới trong phiên bản 3. 10

Ngăn thông dịch¶

Một số hàm sau trả về đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70. Để có khả năng tương thích ngược, các đối tượng này cho phép các hoạt động giống như bộ trên tất cả các thuộc tính ngoại trừ
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
71. Hành vi này được coi là không dùng nữa và có thể bị xóa trong tương lai

lớp kiểm tra. FrameInfokhung

Đối tượng frame mà bản ghi tương ứng.

tên tệp

Tên tệp được liên kết với mã đang được thực thi bởi khung mà bản ghi này tương ứng với

lineno

Số dòng của dòng hiện tại được liên kết với mã đang được thực thi bởi khung mà bản ghi này tương ứng với

chức năng

Tên chức năng đang được thực thi bởi khung bản ghi này tương ứng với

code_context

Danh sách các dòng ngữ cảnh từ mã nguồn đang được thực thi bởi khung mà bản ghi này tương ứng với

chỉ mục

Chỉ mục của dòng hiện tại đang được thực thi trong danh sách

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
72

vị trí

Một đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
73 chứa số dòng bắt đầu, số dòng kết thúc, phần bù cột bắt đầu và phần bù cột kết thúc được liên kết với lệnh đang được thực thi bởi khung mà bản ghi này tương ứng với

Đã thay đổi trong phiên bản 3. 5. Trả về một bộ có tên thay vì một

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
74.

Đã thay đổi trong phiên bản 3. 11.

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70 hiện là một thể hiện của lớp (tương thích ngược với bộ có tên trước đó).

lớp kiểm tra. Truy nguyêntên tệp

Tên tệp được liên kết với mã đang được thực thi bởi khung truy nguyên này tương ứng với

lineno

Số dòng của dòng hiện tại được liên kết với mã đang được thực thi bởi khung mà lần theo dõi này tương ứng với

chức năng

Tên chức năng đang được thực thi bởi khung truy nguyên này tương ứng với

code_context

Danh sách các dòng ngữ cảnh từ mã nguồn đang được thực thi bởi khung mà lần theo dõi này tương ứng với

chỉ mục

Chỉ mục của dòng hiện tại đang được thực thi trong danh sách

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
72

vị trí

Một đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
73 chứa số dòng bắt đầu, số dòng kết thúc, phần bù cột bắt đầu và phần bù cột kết thúc được liên kết với lệnh đang được thực thi bởi khung mà lần truy nguyên này tương ứng với

Đã thay đổi trong phiên bản 3. 11. ______678 hiện là một thể hiện của lớp (tương thích ngược với bộ có tên trước đó).

Ghi chú

Giữ các tham chiếu đến các đối tượng khung, như được tìm thấy trong phần tử đầu tiên của khung ghi lại các hàm này, có thể khiến chương trình của bạn tạo các chu kỳ tham chiếu. Khi một chu trình tham chiếu đã được tạo, tuổi thọ của tất cả các đối tượng có thể được truy cập từ các đối tượng hình thành chu trình có thể dài hơn nhiều ngay cả khi trình phát hiện chu trình tùy chọn của Python được bật. Nếu các chu kỳ như vậy phải được tạo, điều quan trọng là phải đảm bảo chúng bị phá vỡ một cách rõ ràng để tránh việc phá hủy các đối tượng bị trì hoãn và tăng mức tiêu thụ bộ nhớ xảy ra

Mặc dù trình phát hiện chu trình sẽ bắt được những thứ này, nhưng việc phá hủy khung (và các biến cục bộ) có thể được xác định bằng cách loại bỏ chu trình trong mệnh đề

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
79. Điều này cũng quan trọng nếu trình phát hiện chu kỳ bị tắt khi Python được biên dịch hoặc sử dụng
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
80. Ví dụ

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
1

Nếu bạn muốn giữ lại khung xung quanh (ví dụ: để in truy nguyên sau này), bạn cũng có thể ngắt các chu kỳ tham chiếu bằng cách sử dụng phương pháp

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
81

Đối số ngữ cảnh tùy chọn được hỗ trợ bởi hầu hết các hàm này chỉ định số lượng dòng ngữ cảnh sẽ trả về, được căn giữa xung quanh dòng hiện tại

kiểm tra. getframeinfo(khung , bối cảnh=1)

Nhận thông tin về một khung hoặc đối tượng truy nguyên. Một đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
78 được trả lại

Đã thay đổi trong phiên bản 3. 11. Một đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
78 được trả về thay vì một bộ có tên.

kiểm tra. getouterframes(frame , bối cảnh=1)

Nhận danh sách các đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70 cho một khung và tất cả các khung bên ngoài. Các khung này đại diện cho các cuộc gọi dẫn đến việc tạo khung. Mục đầu tiên trong danh sách trả về đại diện cho khung;

Đã thay đổi trong phiên bản 3. 5. Một danh sách các bộ dữ liệu được đặt tên

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
85 được trả về.

Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70 được trả về.

kiểm tra. getinnerframes(truy ngược , bối cảnh=1)

Nhận danh sách các đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70 cho khung truy nguyên và tất cả các khung bên trong. Các khung này đại diện cho các cuộc gọi được thực hiện do kết quả của khung. Mục đầu tiên trong danh sách đại diện cho truy xuất nguồn gốc;

Đã thay đổi trong phiên bản 3. 5. Một danh sách các bộ dữ liệu được đặt tên

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
85 được trả về.

Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70 được trả về.

kiểm tra. khung hình hiện tại()

Trả lại đối tượng khung cho khung ngăn xếp của người gọi

Chi tiết triển khai CPython. Chức năng này dựa trên hỗ trợ khung ngăn xếp Python trong trình thông dịch, không được đảm bảo tồn tại trong tất cả các triển khai của Python. Nếu chạy trong một triển khai không có hỗ trợ khung ngăn xếp Python, hàm này trả về

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
7

kiểm tra. ngăn xếp(bối cảnh=1)

Trả về danh sách các đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70 cho ngăn xếp của người gọi. Mục đầu tiên trong danh sách được trả về đại diện cho người gọi;

Đã thay đổi trong phiên bản 3. 5. Một danh sách các bộ dữ liệu được đặt tên

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
85 được trả về.

Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70 được trả về.

kiểm tra. dấu vết(bối cảnh=1)

Trả về danh sách các đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70 cho ngăn xếp giữa khung hiện tại và khung trong đó một ngoại lệ hiện đang được xử lý đã được đưa ra trong. Mục đầu tiên trong danh sách đại diện cho người gọi;

Đã thay đổi trong phiên bản 3. 5. Một danh sách các bộ dữ liệu được đặt tên

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
85 được trả về.

Đã thay đổi trong phiên bản 3. 11. Một danh sách các đối tượng

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
70 được trả về.

Tìm nạp thuộc tính tĩnh¶

Cả

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
37 và
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
98 đều có thể kích hoạt thực thi mã khi tìm nạp hoặc kiểm tra sự tồn tại của các thuộc tính. Các mô tả, giống như các thuộc tính, sẽ được gọi và
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
99 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
600 có thể được gọi

Đối với những trường hợp bạn muốn xem xét nội tâm thụ động, chẳng hạn như các công cụ tài liệu, điều này có thể gây bất tiện.

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
601 có cùng chữ ký với
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
37 nhưng tránh thực thi mã khi tìm nạp thuộc tí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'].annotation
<class 'int'>
99 hoặc
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
600

Ghi chú. chức năng này có thể không truy xuất được tất cả các thuộc tính mà getattr có thể tìm nạp (như các thuộc tính được tạo động) và có thể tìm thấy các thuộc tính mà getattr không thể (như các bộ mô tả làm tăng AttributeError). Nó cũng có thể trả về các đối tượng mô tả thay vì các thành viên thể hiện

Nếu phiên bản

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
605 bị che khuất bởi một thành viên khác (ví dụ: một thuộc tính) thì chức năng này sẽ không thể tìm thấy các thành viên của phiên bản

Mới trong phiên bản 3. 2

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

Trạng thái hiện tại của Trình tạo và Coroutine¶

Khi triển khai bộ lập lịch coroutine và cho các ứng dụng nâng cao khác của trình tạo, sẽ rất hữu ích khi xác định xem trình tạo hiện đang thực thi, đang chờ để bắt đầu hoặc tiếp tục hoặc thực thi hay đã kết thúc.

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
607 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 nhằm mục đích sử dụng với các đối tượng coroutine được tạo bởi các hàm

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
71, nhưng sẽ chấp nhận bất kỳ đối tượng giống như coroutine nào có thuộc tính
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
609 và
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
610

Cá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

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
611 trong phần thân của trình tạo và áp dụng tất cả các cảnh báo tương tự

Nếu trình tạo là trình tạo không có khung hiện được liên kết, thì một từ điển trống sẽ được trả về.

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
02 được nâng lên nếu trình tạo không phải là đối tượng trình tạo Python.

Chi tiết triển khai CPython. Hàm này dựa vào trình tạo hiển thị khung ngăn xếp Python để xem xét nội tâm, điều này không được đảm bảo là trường hợp trong tất cả các triển khai của Python. Trong những trường hợp như vậy, chức năng này sẽ luôn trả về một từ điển trống

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

kiểm tra. getcoroutinelocals(coroutine)

Chức năng này tương tự như

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
613, nhưng hoạt động cho các đối tượng coroutine được tạo bởi các chức năng
>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
71

Mới trong phiên bản 3. 5

Đối tượng mã Cờ bit¶

Các đối tượng mã Python có thuộc tính

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
615, là bản đồ bit của các cờ sau

kiểm tra. CO_OPTIMIZED

Đối tượng mã được tối ưu hóa, sử dụng địa phương nhanh

kiểm tra. CO_NEWLOCALS

Nếu được đặt, một lệnh mới sẽ được tạo cho khung

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
616 khi đối tượng mã được thực thi

kiểm tra. CO_VAARGS

Đối tượng mã có tham số vị trí thay đổi (giống như ____042)

kiểm tra. CO_VARKEYWORDS

Đối tượng mã có tham số từ khóa biến (

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
43-like)

kiểm tra. CO_NESTED

Cờ được đặt khi đối tượng mã là một hàm lồng nhau

kiểm tra. CO_GENERATOR

Cờ được đặt khi đối tượng mã là hàm tạo, tôi. e. một đối tượng trình tạo được trả về khi đối tượng mã được thực thi

kiểm tra. CO_COROUTINE

Cờ được đặt khi đối tượng mã là một hàm coroutine. Khi đối tượng mã được thực thi, nó trả về một đối tượng coroutine. Xem PEP 492 để biết thêm chi tiết

Mới trong phiên bản 3. 5

kiểm tra. CO_ITERABLE_COROUTINE

Cờ được sử dụng để chuyển đổi trình tạo thành coroutines dựa trên trình tạo. Các đối tượng trình tạo có cờ này có thể được sử dụng trong biểu thức

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
77 và có thể
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
..     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>
1 đối tượng coroutine. Xem PEP 492 để biết thêm chi tiết

Mới trong phiên bản 3. 5

kiểm tra. CO_ASYNC_GENERATOR

Cờ được đặt khi đối tượng mã là hàm tạo không đồng bộ. Khi đối tượng mã được thực thi, nó trả về một đối tượng trình tạo không đồng bộ. Xem PEP 525 để biết thêm chi tiết

Mới trong phiên bản 3. 6

Ghi chú

Các cờ dành riêng cho CPython và có thể không được xác định trong các triển khai Python khác. Hơn nữa, các cờ là một chi tiết triển khai và có thể bị xóa hoặc không dùng nữa trong các bản phát hành Python trong tương lai. Bạn nên sử dụng các API công khai từ mô-đun

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
3 cho mọi nhu cầu xem xét nội tâm

Giao diện dòng lệnh¶

Mô-đun

>>> async def agen():
..     yield 1
...
>>> inspect.isasyncgenfunction(agen)
True
3 cũng cung cấp khả năng xem xét nội tâm cơ bản từ dòng lệnh

Theo mặc định, chấp nhận tên của mô-đun và in mã nguồn của mô-đun đó. Thay vào đó, một lớp hoặc chức năng trong mô-đun có thể được in bằng cách thêm dấu hai chấm và tên đủ điều kiện của đối tượng đích

Chúng ta có thể ghi đè lên các biến trong Python không?

Quy tắc gán biến . 2. Gán như y = 'bye' ở trên, trong đó biến có một con trỏ hiện có trong đó, sẽ ghi đè con trỏ hiện có bằng con trỏ mới .

Ghi đè có nghĩa là gì trong Python?

Đầu ra. Chương trình. Để ghi đè lên một tệp trong Python Ghi đè lên một tệp. Thay thế nội dung cũ của dữ liệu .

Điều gì xảy ra khi bạn ghi đè lên một biến trong Python?

Python không sao chép giá trị ban đầu của biến trước khi lưu biến bị ghi đè . Có thể bạn đang thấy hiệu ứng của các bộ đệm khác nhau khiến chương trình bị chậm lại. Hoặc nếu bạn đang tạo các đối tượng, một trình thu gom rác sẽ được gọi để xóa các đối tượng bạn đã tạo không còn được tham chiếu nữa.

Bạn có thể ghi đè các hàm tích hợp trong Python không?

Trừ khi bạn có lý do đặc biệt, còn không bạn không nên ghi đè lên các hàm này hay gán giá trị cho một biến có cùng tên với biến . Ghi đè một tích hợp sẵn có thể có tác dụng phụ không mong muốn hoặc có thể gây ra lỗi thời gian chạy. Các nhà phát triển Python thường sử dụng 'nguyên trạng' tích hợp sẵn.