Hướng dẫn disassembly python - tháo gỡ con trăn

Disassembling Python Byte Code

Nhân tiện trong challenge WhiteHat Grand Prix vừa qua, mình thấy có một bài liên quan đến Disassembling Pythong Byte Code nên mình viết một bài về ACM/Programming cho các bạn tham khảo để biết thêm về "Disassembling Python Byte Code". Task cụ thể trong Grandprix đó là "Pyc" và writeup cho bai này cũng được một số team explain, mình xin dẫn link một write up mà mình tìm được:

https://bl4ckbull3t.blogspot.com/2017/12/writeup-pyc-sau-khi-nhan-uoc-file-minh.html

Okey, vậy Disassembling Python Byte Code là gì ? Bạn muốn biết chi tiết những gì mã của bạn đang làm? Bằng cách phân tích nó vào mã byte cấp thấp được sử dụng bởi thông dịch viên. Module "dis" được sử dụng để xuất ra bất kì một hàm nào của Python. Ví dụ:
Bạn muốn biết chi tiết những gì mã của bạn đang làm? Bằng cách phân tích nó vào mã byte cấp thấp được sử dụng bởi thông dịch viên.
Module "dis" được sử dụng để xuất ra bất kì một hàm nào của Python. Ví dụ:

Hướng dẫn disassembly python - tháo gỡ con trăn

"dis" module thực sự hữu ích nếu bạn muốn nghiên cứu điều gì thực sự đang diễn ra khi chương trình của bạn thực thi ở level rất thấp.(Ví dụ: bạn đang muốn tìm hiểu về hiệu suất hoạt động của chương trình). Mã byte được giải thích bởi hàm "dis()" có sẵn trên các hàm như sau:
Mã byte được giải thích bởi hàm "dis()" có sẵn trên các hàm như sau:

Nếu muốn giải thích được đoạn code này cho chính bạn, bạn cần sử dụng một số hằng số được định nghĩa trong module "opcode". Ví dụ:

Có một điều đáng buồn là module này không hề có chức năng để biễu diễn bytecode theo cách trông giống như là programming. Tuy nhiên chức năng "generator" sẽ lấy chuỗi mã bytecode và biến nó thành opcodes và các đối số.

Và output

Trên đây là một ví dụ thực tế về bytecode Python . Hy vọng các bạn có thể hiểu rõ hơn về thể loại này một chút, sau này gặp các bài như này cũng không bỡ ngỡ. Ứng dụng của Bytecode mình sẽ viết thêm một bài khác.

Mã nguồn: lib/dis.py Lib/dis.py


Mô -đun dis hỗ trợ phân tích mã byte cpython bằng cách tháo rời nó. Mã byte cpython mà mô -đun này lấy làm đầu vào được xác định trong tệp Include/opcode.h và được sử dụng bởi trình biên dịch và trình thông dịch.bytecode by disassembling it. The CPython bytecode which this module takes as an input is defined in the file Include/opcode.h and used by the compiler and the interpreter.

Chi tiết triển khai CPYThon: Bytecode là một chi tiết triển khai của trình thông dịch CPython. Không có đảm bảo nào được thực hiện rằng mã byte sẽ không được thêm, loại bỏ hoặc thay đổi giữa các phiên bản của Python. Việc sử dụng mô -đun này không nên được xem xét để hoạt động trên các bản phát hành Python VM hoặc Python. Bytecode is an implementation detail of the CPython interpreter. No guarantees are made that bytecode will not be added, removed, or changed between versions of Python. Use of this module should not be considered to work across Python VMs or Python releases.

Đã thay đổi trong phiên bản 3.6: Sử dụng 2 byte cho mỗi hướng dẫn. Trước đây số lượng byte thay đổi theo hướng dẫn.Use 2 bytes for each instruction. Previously the number of bytes varied by instruction.

Đã thay đổi trong phiên bản 3.10: Đối số của Jump, Hướng dẫn xử lý ngoại lệ và Loop hiện là phần bù hướng dẫn thay vì bù byte.The argument of jump, exception handling and loop instructions is now the instruction offset rather than the byte offset.

Đã thay đổi trong phiên bản 3.11: Một số hướng dẫn được kèm theo một hoặc nhiều mục bộ đệm nội tuyến, có dạng hướng dẫn CACHE. Các hướng dẫn này được ẩn theo mặc định, nhưng có thể được hiển thị bằng cách chuyển show_caches=True cho bất kỳ tiện ích dis nào. Hơn nữa, trình thông dịch hiện đang điều chỉnh mã byte để chuyên về nó cho các điều kiện thời gian chạy khác nhau. Mã byte thích ứng có thể được hiển thị bằng cách vượt qua adaptive=True.Some instructions are accompanied by one or more inline cache entries, which take the form of CACHE instructions. These instructions are hidden by default, but can be shown by passing show_caches=True to any dis utility. Furthermore, the interpreter now adapts the bytecode to specialize it for different runtime conditions. The adaptive bytecode can be shown by passing adaptive=True.

Ví dụ: Cho chức năng myfunc():

def myfunc(alist):
    return len(alist)

Lệnh sau đây có thể được sử dụng để hiển thị việc tháo gỡ myfunc():

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE

(Số 2 2 là một số dòng).

Phân tích mã byte¶

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

API phân tích bytecode cho phép các đoạn mã python được gói trong một đối tượng

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
1 cung cấp quyền truy cập dễ dàng vào các chi tiết của mã được biên dịch.

classDis.ByteCode (x, *, first_line = none, current_offset = none, show_caches = false, formitive = false)dis.Bytecode(x, *, first_line=None, current_offset=None, show_caches=False, adaptive=False)

Phân tích mã byte tương ứng với một hàm, trình tạo, trình tạo không đồng bộ, coroutine, phương thức, chuỗi mã nguồn hoặc đối tượng mã (được trả về bởi

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
2).

Đây là một trình bao bọc tiện lợi xung quanh nhiều chức năng được liệt kê dưới đây, đáng chú ý nhất là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
3, khi lặp lại một trường hợp
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
1 mang lại các hoạt động của mã byte như các trường hợp
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
5.

Nếu First_line không phải là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, nó chỉ ra số dòng cần được báo cáo cho dòng nguồn đầu tiên trong mã tháo rời. Mặt khác, thông tin dòng nguồn (nếu có) được lấy trực tiếp từ đối tượng mã tháo rời.

Nếu current_offset không phải là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, nó sẽ đề cập đến một phần bù lệnh trong mã tháo rời. Cài đặt điều này có nghĩa là
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
8 sẽ hiển thị một điểm đánh dấu hướng dẫn hiện tại của người dùng đối với mã opcode được chỉ định.

Nếu show_caches là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9,
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
8 sẽ hiển thị các mục lưu trữ nội tuyến được sử dụng bởi trình thông dịch để chuyên về mã byte.

Nếu thích ứng là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9,
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
8 sẽ hiển thị mã byte được chuyên dụng có thể khác với mã byte gốc.

classMethodFrom_TraceBack (tb, *, show_caches = false) ¶from_traceback(tb, *, show_caches=False)

Xây dựng một thể hiện

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
1 từ TraceBack đã cho, đặt current_offset thành lệnh chịu trách nhiệm cho ngoại lệ.

CodeObj¶

Đối tượng mã được biên dịch.

dòng đầu tiên¶

Dòng nguồn đầu tiên của đối tượng mã (nếu có)

dis () ¶()

Trả về một chế độ xem được định dạng của các hoạt động bytecode (giống như được in bởi

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
4, nhưng được trả về dưới dạng chuỗi nhiều dòng).

thông tin()¶()

Trả về một chuỗi đa dòng được định dạng với thông tin chi tiết về đối tượng mã, như

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
5.

Đã thay đổi trong phiên bản 3.7: Điều này hiện có thể xử lý các đối tượng máy phát Coroutine và không đồng bộ.This can now handle coroutine and asynchronous generator objects.

Đã thay đổi trong phiên bản 3.11: Đã thêm show_caches và các tham số thích ứng.Added the show_caches and adaptive parameters.

Example:

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE

Chức năng phân tích

Mô -đun dis cũng xác định các hàm phân tích sau đây chuyển đổi đầu vào trực tiếp sang đầu ra mong muốn. Chúng có thể hữu ích nếu chỉ có một hoạt động duy nhất được thực hiện, vì vậy đối tượng phân tích trung gian không hữu ích:

dis.code_info (x) ¶code_info(x)

Trả về một chuỗi đa dòng được định dạng với thông tin đối tượng mã chi tiết cho hàm được cung cấp, trình tạo, trình tạo không đồng bộ, coroutine, phương thức, chuỗi mã nguồn hoặc đối tượng mã.

Lưu ý rằng nội dung chính xác của chuỗi thông tin mã phụ thuộc rất nhiều và chúng có thể thay đổi tùy ý trên các bản phát hành Python VM hoặc Python.

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

Đã thay đổi trong phiên bản 3.7: Điều này hiện có thể xử lý các đối tượng máy phát Coroutine và không đồng bộ.This can now handle coroutine and asynchronous generator objects.

Đã thay đổi trong phiên bản 3.11: Đã thêm show_caches và các tham số thích ứng.show_code(x, *, file=None)

Chức năng phân tích

Mô -đun dis cũng xác định các hàm phân tích sau đây chuyển đổi đầu vào trực tiếp sang đầu ra mong muốn. Chúng có thể hữu ích nếu chỉ có một hoạt động duy nhất được thực hiện, vì vậy đối tượng phân tích trung gian không hữu ích:

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

Đã thay đổi trong phiên bản 3.4: Đã thêm tham số tệp.Added file parameter.

dis.dis (x = none, *, file = none, septth = none, show_caches = false, formedive = false)dis(x=None, *, file=None, depth=None, show_caches=False, adaptive=False)

Tháo rời đối tượng x. X có thể biểu thị một mô -đun, lớp, phương thức, hàm, trình tạo, trình tạo không đồng bộ, coroutine, đối tượng mã, chuỗi mã nguồn hoặc chuỗi byte của mã byte thô. Đối với một mô -đun, nó tháo rời tất cả các chức năng. Đối với một lớp, nó tháo rời tất cả các phương thức (bao gồm cả phương thức lớp và tĩnh). Đối với một đối tượng mã hoặc chuỗi mã byte thô, nó in một dòng trên mỗi lệnh bytecode. Nó cũng tách rời các đối tượng mã lồng nhau (mã của sự hiểu biết, biểu thức máy phát và các hàm lồng nhau và mã được sử dụng để xây dựng các lớp lồng nhau). Các chuỗi đầu tiên được biên dịch cho các đối tượng mã với hàm tích hợp

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
2 trước khi được tháo rời. Nếu không có đối tượng nào được cung cấp, chức năng này tháo gỡ dấu vết cuối cùng.

Việc tháo gỡ được viết dưới dạng văn bản cho đối số tệp được cung cấp nếu được cung cấp và cho

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
7 nếu không.

Độ sâu tối đa của đệ quy bị giới hạn bởi độ sâu trừ khi nó là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6. dis2 có nghĩa là không đệ quy.

Nếu show_caches là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9, chức năng này sẽ hiển thị các mục bộ đệm nội tuyến được trình thông dịch sử dụng để chuyên về mã byte.

Nếu thích ứng là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9, hàm này sẽ hiển thị mã byte được chuyên dụng có thể khác với mã byte gốc.

Đã thay đổi trong phiên bản 3.4: Đã thêm tham số tệp.Added file parameter.

dis.dis (x = none, *, file = none, septth = none, show_caches = false, formedive = false)Implemented recursive disassembling and added depth parameter.

Tháo rời đối tượng x. X có thể biểu thị một mô -đun, lớp, phương thức, hàm, trình tạo, trình tạo không đồng bộ, coroutine, đối tượng mã, chuỗi mã nguồn hoặc chuỗi byte của mã byte thô. Đối với một mô -đun, nó tháo rời tất cả các chức năng. Đối với một lớp, nó tháo rời tất cả các phương thức (bao gồm cả phương thức lớp và tĩnh). Đối với một đối tượng mã hoặc chuỗi mã byte thô, nó in một dòng trên mỗi lệnh bytecode. Nó cũng tách rời các đối tượng mã lồng nhau (mã của sự hiểu biết, biểu thức máy phát và các hàm lồng nhau và mã được sử dụng để xây dựng các lớp lồng nhau). Các chuỗi đầu tiên được biên dịch cho các đối tượng mã với hàm tích hợp

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
2 trước khi được tháo rời. Nếu không có đối tượng nào được cung cấp, chức năng này tháo gỡ dấu vết cuối cùng.This can now handle coroutine and asynchronous generator objects.

Việc tháo gỡ được viết dưới dạng văn bản cho đối số tệp được cung cấp nếu được cung cấp và cho

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
7 nếu không.Added the show_caches and adaptive parameters.

Độ sâu tối đa của đệ quy bị giới hạn bởi độ sâu trừ khi nó là
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6. dis2 có nghĩa là không đệ quy.
distb(tb=None, *, file=None, show_caches=False, adaptive=False)

Nếu show_caches là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9, chức năng này sẽ hiển thị các mục bộ đệm nội tuyến được trình thông dịch sử dụng để chuyên về mã byte.

Việc tháo gỡ được viết dưới dạng văn bản cho đối số tệp được cung cấp nếu được cung cấp và cho

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
7 nếu không.

Đã thay đổi trong phiên bản 3.4: Đã thêm tham số tệp.Added file parameter.

Việc tháo gỡ được viết dưới dạng văn bản cho đối số tệp được cung cấp nếu được cung cấp và cho

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
7 nếu không.Added the show_caches and adaptive parameters.

Độ sâu tối đa của đệ quy bị giới hạn bởi độ sâu trừ khi nó là
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6. dis2 có nghĩa là không đệ quy.
disassemble(code, lasti=- 1, *, file=None, show_caches=False, adaptive=False)dis.disco(code, lasti=- 1, *, file=None, show_caches=False, adaptive=False)

Nếu show_caches là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9, chức năng này sẽ hiển thị các mục bộ đệm nội tuyến được trình thông dịch sử dụng để chuyên về mã byte.

  1. Nếu thích ứng là

    >>> dis.dis(myfunc)
      2           0 RESUME                   0
    
      3           2 LOAD_GLOBAL              1 (NULL + len)
                 14 LOAD_FAST                0 (alist)
                 16 PRECALL                  1
                 20 CALL                     1
                 30 RETURN_VALUE
    
    9, hàm này sẽ hiển thị mã byte được chuyên dụng có thể khác với mã byte gốc.

  2. Đã thay đổi trong phiên bản 3.7: Thực hiện phân tách đệ quy và thêm tham số độ sâu.

  3. Đã thay đổi trong phiên bản 3.7: Điều này hiện có thể xử lý các đối tượng máy phát Coroutine và không đồng bộ.

  4. Đã thay đổi trong phiên bản 3.11: Đã thêm show_caches và các tham số thích ứng.

  5. dis.distb (tb = none, *, file = none, show_caches = false, formedive = false) ¶

  6. Tháo rời chức năng hàng đầu của một dấu vết, sử dụng dấu vết cuối cùng nếu không có ai được thông qua. Hướng dẫn gây ra ngoại lệ được chỉ định.

  7. dis.disassemble (code, lasti = -1, *, file = none, show_caches = false, formedive = false) ) ¶

Tháo rời một đối tượng mã, chỉ ra lệnh cuối cùng nếu Lasti được cung cấp. Đầu ra được chia trong các cột sau:

Việc tháo gỡ được viết dưới dạng văn bản cho đối số tệp được cung cấp nếu được cung cấp và cho

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
7 nếu không.

Đã thay đổi trong phiên bản 3.4: Đã thêm tham số tệp.Added file parameter.

Việc tháo gỡ được viết dưới dạng văn bản cho đối số tệp được cung cấp nếu được cung cấp và cho

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
7 nếu không.Added the show_caches and adaptive parameters.

Độ sâu tối đa của đệ quy bị giới hạn bởi độ sâu trừ khi nó là
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6. dis2 có nghĩa là không đệ quy.
get_instructions(x, *, first_line=None, show_caches=False, adaptive=False)

Nếu show_caches là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9, chức năng này sẽ hiển thị các mục bộ đệm nội tuyến được trình thông dịch sử dụng để chuyên về mã byte.

Nếu thích ứng là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9, hàm này sẽ hiển thị mã byte được chuyên dụng có thể khác với mã byte gốc.

Đã thay đổi trong phiên bản 3.7: Thực hiện phân tách đệ quy và thêm tham số độ sâu.

Đã thay đổi trong phiên bản 3.7: Điều này hiện có thể xử lý các đối tượng máy phát Coroutine và không đồng bộ.

Đã thay đổi trong phiên bản 3.11: Đã thêm show_caches và các tham số thích ứng.

Việc tháo gỡ được viết dưới dạng văn bản cho đối số tệp được cung cấp nếu được cung cấp và cho

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
7 nếu không.Added the show_caches and adaptive parameters.

Độ sâu tối đa của đệ quy bị giới hạn bởi độ sâu trừ khi nó là
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6. dis2 có nghĩa là không đệ quy.
findlinestarts(code)

Nếu show_caches là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9, chức năng này sẽ hiển thị các mục bộ đệm nội tuyến được trình thông dịch sử dụng để chuyên về mã byte.

Nếu thích ứng là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9, hàm này sẽ hiển thị mã byte được chuyên dụng có thể khác với mã byte gốc.Line numbers can be decreasing. Before, they were always increasing.

Đã thay đổi trong phiên bản 3.7: Thực hiện phân tách đệ quy và thêm tham số độ sâu.The PEP 626 Include/opcode.h2 method is used instead of the Include/opcode.h5 and Include/opcode.h6 attributes of the code object.

Đã thay đổi trong phiên bản 3.7: Điều này hiện có thể xử lý các đối tượng máy phát Coroutine và không đồng bộ.findlabels(code)

Đã thay đổi trong phiên bản 3.11: Đã thêm show_caches và các tham số thích ứng.

dis.distb (tb = none, *, file = none, show_caches = false, formedive = false) ¶stack_effect(opcode, oparg=None, *, jump=None)

Tháo rời chức năng hàng đầu của một dấu vết, sử dụng dấu vết cuối cùng nếu không có ai được thông qua. Hướng dẫn gây ra ngoại lệ được chỉ định.

dis.disassemble (code, lasti = -1, *, file = none, show_caches = false, formedive = false) ) ¶

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

Đã thay đổi trong phiên bản 3.8: Thêm tham số nhảy.Added jump parameter.

Hướng dẫn mã byte Python

Hàm

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
3 và lớp
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
1 cung cấp chi tiết về các hướng dẫn mã byte như
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
5 Các phiên bản:

classdis.InsrionStions¶dis.Instruction

Chi tiết cho hoạt động của mã byte

Opcode¶

Mã số cho hoạt động, tương ứng với các giá trị opcode được liệt kê bên dưới và các giá trị bytecode trong các bộ sưu tập opcode.Opcode collections.

tên opname¶

Tên người có thể đọc được cho hoạt động

âm mưu

Đối số số cho hoạt động (nếu có), nếu không

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6

Argval¶

đã giải quyết giá trị arg (nếu có), nếu không

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6

Argrepr¶

Mô tả có thể đọc được của con người về đối số hoạt động (nếu có), nếu không là một chuỗi trống.

bù lại¶

Bắt đầu chỉ số hoạt động trong chuỗi bytecode

starts_line¶

dòng bắt đầu bởi opcode này (nếu có), nếu không

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6

is_jump_target¶

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9 Nếu mã khác nhảy đến đây, nếu không Include/opcode.h9

vị trí

CACHE9 Đối tượng giữ các vị trí bắt đầu và kết thúc được đề cập bởi hướng dẫn này.

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

Đã thay đổi trong phiên bản 3.11: Trường show_caches=True0 được thêm vào.Field show_caches=True0 is added.

classdis.pocations¶dis.Positions

Trong trường hợp thông tin không có sẵn, một số trường có thể là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6.

Lineno¶ end_lineno¶ col_offset¶ end_col_offset¶end_linenocol_offsetend_col_offset

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

Trình biên dịch Python hiện đang tạo các hướng dẫn mã byte sau.

Hướng dẫn chung

Nop¶

Không làm mã. Được sử dụng làm trình giữ chỗ bởi trình tối ưu hóa mã byte và để tạo các sự kiện theo dõi dòng.

Pop_top¶

Loại bỏ mục hàng đầu (TOS).

Sao chép (i) ¶(i)

Đẩy mục thứ i lên đỉnh của ngăn xếp. Mục không được xóa khỏi vị trí ban đầu của nó.

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

Trình biên dịch Python hiện đang tạo các hướng dẫn mã byte sau.(i)

Hướng dẫn chung

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

Trình biên dịch Python hiện đang tạo các hướng dẫn mã byte sau.

Hướng dẫn chung

Nop¶

Không làm mã. Được sử dụng làm trình giữ chỗ bởi trình tối ưu hóa mã byte và để tạo các sự kiện theo dõi dòng.

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

Trình biên dịch Python hiện đang tạo các hướng dẫn mã byte sau.

Hướng dẫn chung

Nop¶

Không làm mã. Được sử dụng làm trình giữ chỗ bởi trình tối ưu hóa mã byte và để tạo các sự kiện theo dõi dòng.

Pop_top¶

Loại bỏ mục hàng đầu (TOS).

Sao chép (i) ¶

Đẩy mục thứ i lên đỉnh của ngăn xếp. Mục không được xóa khỏi vị trí ban đầu của nó.

Hoán đổi (i)

Trao đổi TOS với mục tại vị trí i.

Bộ nhớ lưu

Thay vì là một hướng dẫn thực tế, mã opcode này được sử dụng để đánh dấu thêm không gian cho trình thông dịch để lưu trữ dữ liệu hữu ích trực tiếp trong chính mã byte. Nó được ẩn tự động bởi tất cả các tiện ích dis, nhưng có thể được xem với show_caches=True.

Về mặt logic, không gian này là một phần của hướng dẫn trước. Nhiều opcodes dự kiến ​​sẽ được theo sau bởi một số lượng chính xác của bộ nhớ cache và sẽ hướng dẫn người phiên dịch bỏ qua chúng trong thời gian chạy.

Bộ đệm đông dân có thể trông giống như các hướng dẫn tùy ý, vì vậy nên cẩn thận khi đọc hoặc sửa đổi mã byte thô, thích ứng có chứa dữ liệu được nhanh chóng.generator iterator or coroutine object it is left as is. Otherwise, implements show_caches=True8.

Hoạt động đơn

Các hoạt động đơn vị đứng đầu ngăn xếp, áp dụng hoạt động và đẩy kết quả trở lại trên ngăn xếp.

Unary_positive¶

Thực hiện show_caches=True4.

Unary_negative¶(op)

Thực hiện show_caches=True5.

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

Trình biên dịch Python hiện đang tạo các hướng dẫn mã byte sau.

Hướng dẫn chung

Nop¶

Không làm mã. Được sử dụng làm trình giữ chỗ bởi trình tối ưu hóa mã byte và để tạo các sự kiện theo dõi dòng.

Pop_top¶

Loại bỏ mục hàng đầu (TOS).

Sao chép (i) ¶

Đẩy mục thứ i lên đỉnh của ngăn xếp. Mục không được xóa khỏi vị trí ban đầu của nó.(where)

Hoán đổi (i)

Trao đổi TOS với mục tại vị trí i.

  • Bộ nhớ lưu

  • Thay vì là một hướng dẫn thực tế, mã opcode này được sử dụng để đánh dấu thêm không gian cho trình thông dịch để lưu trữ dữ liệu hữu ích trực tiếp trong chính mã byte. Nó được ẩn tự động bởi tất cả các tiện ích dis, nhưng có thể được xem với show_caches=True.

Hoạt động đơn

Các hoạt động đơn vị đứng đầu ngăn xếp, áp dụng hoạt động và đẩy kết quả trở lại trên ngăn xếp.Previously, this instruction did not have an oparg.

Unary_positive¶

Thực hiện show_caches=True4.

Hoạt động đơn

Các hoạt động đơn vị đứng đầu ngăn xếp, áp dụng hoạt động và đẩy kết quả trở lại trên ngăn xếp.Returning awaitable objects from adaptive=True5 is no longer supported.

Unary_positive¶

Thực hiện show_caches=True4.

Hoạt động đơn

Các hoạt động đơn vị đứng đầu ngăn xếp, áp dụng hoạt động và đẩy kết quả trở lại trên ngăn xếp.

Unary_positive¶

Thực hiện show_caches=True4.

Unary_negative¶Exception representation on the stack now consist of one, not three, items.

Thực hiện show_caches=True5.

Giải quyết adaptive=True1 và adaptive=True3 từ đối tượng trên đỉnh của ngăn xếp. Đẩy adaptive=True3 và kết quả của myfunc()4 vào ngăn xếp.

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

Mã hóa linh tinh

Print_expr¶

Thực hiện câu lệnh biểu thức cho chế độ tương tác. TOS được loại bỏ khỏi ngăn xếp và in. Trong chế độ không tương tác, một câu lệnh biểu thức bị chấm dứt với myfunc()5.

Set_add (i) ¶(i)

Gọi myfunc()6. Được sử dụng để thực hiện bộ toàn diện.

List_append (i) ¶(i)

Gọi myfunc()7. Được sử dụng để thực hiện toàn bộ danh sách.

MAP_ADD (i) ¶(i)

Gọi myfunc()8. Được sử dụng để thực hiện các toàn bộ Dict.

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

Thay đổi trong phiên bản 3.8: Giá trị bản đồ là TOS và khóa bản đồ là TOS1. Trước đây, những điều đó đã được đảo ngược.Map value is TOS and map key is TOS1. Before, those were reversed.

Đối với tất cả các hướng dẫn myfunc()9,

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
00 và
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
01, trong khi giá trị gia tăng hoặc cặp khóa/giá trị được bật ra, đối tượng container vẫn còn trên ngăn xếp để có sẵn để lặp thêm của vòng lặp.

Return_value¶

Trả về với TOS cho người gọi của chức năng.

GIÁ TRỊ NĂNG SUẤT¶

Pops chos và mang lại nó từ một máy phát điện.generator.

Setup_annotations¶

Kiểm tra xem

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
02 có được xác định trong
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
03 hay không, nếu không, nó được thiết lập thành một
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
04 trống. Opcode này chỉ được phát ra nếu một lớp hoặc cơ thể mô -đun chứa các chú thích thay đổi một cách thống trị.variable annotations statically.

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

Nhập khẩu_star¶

Tải tất cả các ký hiệu không bắt đầu với

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
05 trực tiếp từ các TOS mô -đun đến không gian tên cục bộ. Mô -đun được bật lên sau khi tải tất cả các tên. Opcode này thực hiện
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
06.

Pop_except¶

Bật một giá trị từ ngăn xếp, được sử dụng để khôi phục trạng thái ngoại lệ.

Đã thay đổi trong phiên bản 3.11: Biểu diễn ngoại lệ trên ngăn xếp bây giờ bao gồm một, không phải ba, các mục.Exception representation on the stack now consist of one, not three, items.

Reraise¶

Tái tạo lại ngoại lệ hiện đang đứng đầu ngăn xếp. Nếu Oparg không khác, hãy bật thêm một giá trị từ ngăn xếp được sử dụng để đặt

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
07 của khung hiện tại.

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

Đã thay đổi trong phiên bản 3.11: Biểu diễn ngoại lệ trên ngăn xếp bây giờ bao gồm một, không phải ba, các mục.Exception representation on the stack now consist of one, not three, items.

Reraise¶

Tái tạo lại ngoại lệ hiện đang đứng đầu ngăn xếp. Nếu Oparg không khác, hãy bật thêm một giá trị từ ngăn xếp được sử dụng để đặt

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
07 của khung hiện tại.

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

Push_exc_info¶

Bật một giá trị từ ngăn xếp. Đẩy ngoại lệ hiện tại lên đỉnh của ngăn xếp. Đẩy giá trị ban đầu được bật trở lại ngăn xếp. Được sử dụng trong bộ xử lý ngoại lệ.

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

Push_exc_info¶

Bật một giá trị từ ngăn xếp. Đẩy ngoại lệ hiện tại lên đỉnh của ngăn xếp. Đẩy giá trị ban đầu được bật trở lại ngăn xếp. Được sử dụng trong bộ xử lý ngoại lệ.

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

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

Push_exc_info¶

Bật một giá trị từ ngăn xếp. Đẩy ngoại lệ hiện tại lên đỉnh của ngăn xếp. Đẩy giá trị ban đầu được bật trở lại ngăn xếp. Được sử dụng trong bộ xử lý ngoại lệ.

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

Push_exc_info¶

Bật một giá trị từ ngăn xếp. Đẩy ngoại lệ hiện tại lên đỉnh của ngăn xếp. Đẩy giá trị ban đầu được bật trở lại ngăn xếp. Được sử dụng trong bộ xử lý ngoại lệ.

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

Push_exc_info¶The

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
16 function is in position 4 of the stack rather than 7. Exception representation on the stack now consist of one, not three, items.

Bật một giá trị từ ngăn xếp. Đẩy ngoại lệ hiện tại lên đỉnh của ngăn xếp. Đẩy giá trị ban đầu được bật trở lại ngăn xếp. Được sử dụng trong bộ xử lý ngoại lệ.

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

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

Push_exc_info¶

Bật một giá trị từ ngăn xếp. Đẩy ngoại lệ hiện tại lên đỉnh của ngăn xếp. Đẩy giá trị ban đầu được bật trở lại ngăn xếp. Được sử dụng trong bộ xử lý ngoại lệ.

Mới trong phiên bản 3.11.(delta)

Check_exc_match¶

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

Push_exc_info¶

Bật một giá trị từ ngăn xếp. Đẩy ngoại lệ hiện tại lên đỉnh của ngăn xếp. Đẩy giá trị ban đầu được bật trở lại ngăn xếp. Được sử dụng trong bộ xử lý ngoại lệ.

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

Check_exc_match¶

Thực hiện khớp ngoại lệ cho

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
08. Kiểm tra xem TOS1 có phải là một ngoại lệ phù hợp với TOS hay không. Pops chos và đẩy kết quả boolean của bài kiểm tra.

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

Check_exc_match¶

Thực hiện khớp ngoại lệ cho

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
08. Kiểm tra xem TOS1 có phải là một ngoại lệ phù hợp với TOS hay không. Pops chos và đẩy kết quả boolean của bài kiểm tra.

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

Match_Keys¶

TOS là một bộ thuật của các phím ánh xạ, và TOS1 là chủ đề phù hợp. Nếu TOS1 chứa tất cả các khóa trong TOS, hãy đẩy

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
38 chứa các giá trị tương ứng. Nếu không, đẩy
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6.

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

Đã thay đổi trong phiên bản 3.11: Trước đây, hướng dẫn này cũng đã thúc đẩy giá trị boolean biểu thị thành công (

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9) hoặc thất bại (Include/opcode.h9).Previously, this instruction also pushed a boolean value indicating success (
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9) or failure (Include/opcode.h9).

Store_name (namei) ¶(namei)

Thực hiện

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
42. namei là chỉ mục tên trong thuộc tính
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
43 của đối tượng mã. Trình biên dịch cố gắng sử dụng
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
44 hoặc
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
45 nếu có thể.

Delete_name (namei) ¶(namei)

Thực hiện

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
46, trong đó namei là chỉ mục thành thuộc tính
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
43 của đối tượng mã.

Unpack_seseNENE (Đếm) ¶(count)

Giải nén TOS vào đếm các giá trị riêng lẻ, được đặt vào ngăn xếp từ phải sang trái.

Unpack_ex (số đếm) ¶(counts)

Thực hiện nhiệm vụ với mục tiêu được đặt tên là: Giải nén một điều đáng tin cậy trong các giá trị riêng lẻ, trong đó tổng số giá trị có thể nhỏ hơn số lượng các mục trong ITEBLE: Một trong những giá trị mới sẽ là danh sách tất cả các mục còn lại.

Byte thấp của số lượng là số lượng giá trị trước giá trị danh sách, byte cao số lượng số lượng giá trị sau nó. Các giá trị kết quả được đặt vào ngăn xếp từ phải sang trái.

Store_attr (namei) ¶(namei)

Thực hiện

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
48, trong đó namei là chỉ mục tên trong
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
43.

Delete_attr (namei) ¶(namei)

Thực hiện

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
50, sử dụng namei làm chỉ mục thành
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
43.

Store_global (namei) ¶(namei)

Hoạt động như

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
52, nhưng lưu trữ tên như một toàn cầu.

Delete_global (namei) ¶(namei)

Hoạt động như

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
53, nhưng xóa một tên toàn cầu.

Load_const (consti) ¶(consti)

Đẩy

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
54 lên ngăn xếp.

Load_name (namei) ¶(namei)

Đẩy giá trị liên quan đến

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
55 lên ngăn xếp.

Build_tuple (đếm) ¶(count)

Tạo một vật phẩm đếm tiêu thụ Tuple từ ngăn xếp và đẩy bộ tuple kết quả lên ngăn xếp.

Build_list (đếm) ¶(count)

Hoạt động như

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
56, nhưng tạo một danh sách.

Build_set (đếm) ¶(count)

Hoạt động như

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
56, nhưng tạo ra một bộ.

Build_map (đếm) ¶(count)

Đẩy một đối tượng từ điển mới lên ngăn xếp. Pops

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
58 Các mục để từ điển giữ các mục nhập:
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
59.

Đã thay đổi trong phiên bản 3.5: Từ điển được tạo từ các mục Stack thay vì tạo một từ điển trống có kích thước trước để giữ các mục đếm.The dictionary is created from stack items instead of creating an empty dictionary pre-sized to hold count items.

Build_const_key_map (đếm) ¶(count)

Phiên bản của

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
60 chuyên về các khóa không đổi. Bật phần tử hàng đầu trên ngăn xếp chứa một bộ khóa, sau đó bắt đầu từ
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
61, bật các giá trị đếm để tạo thành các giá trị trong từ điển được xây dựng.

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

Build_string (đếm) ¶(count)

Concatenates đếm chuỗi từ ngăn xếp và đẩy chuỗi kết quả vào ngăn xếp.

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

Build_string (đếm) ¶

Concatenates đếm chuỗi từ ngăn xếp và đẩy chuỗi kết quả vào ngăn xếp.

List_to_tuple¶

Bật một danh sách từ ngăn xếp và đẩy một tuple chứa cùng các giá trị.(i)

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

List_to_tuple¶

Bật một danh sách từ ngăn xếp và đẩy một tuple chứa cùng các giá trị.(i)

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

List_to_tuple¶

Bật một danh sách từ ngăn xếp và đẩy một tuple chứa cùng các giá trị.(i)

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

List_to_tuple¶

Bật một danh sách từ ngăn xếp và đẩy một tuple chứa cùng các giá trị.(i)

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

List_to_tuple¶

Bật một danh sách từ ngăn xếp và đẩy một tuple chứa cùng các giá trị.(namei)

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

List_extend (i) ¶(opname)

Gọi

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
62. Được sử dụng để xây dựng danh sách.

Set_update (i) ¶(invert)

Gọi

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
63. Được sử dụng để xây dựng các bộ.

List_to_tuple¶

Bật một danh sách từ ngăn xếp và đẩy một tuple chứa cùng các giá trị.(invert)

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

List_to_tuple¶

Bật một danh sách từ ngăn xếp và đẩy một tuple chứa cùng các giá trị.(namei)

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

List_extend (i) ¶(namei)

Gọi

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
62. Được sử dụng để xây dựng danh sách.

Set_update (i) ¶(delta)

Gọi

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
63. Được sử dụng để xây dựng các bộ.

Dict_update (i) ¶(delta)

Gọi

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
64. Được sử dụng để xây dựng các dicts.

Dict_merge (i) ¶

Giống như
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
65 nhưng tăng một ngoại lệ cho các khóa trùng lặp.
(delta)

Load_attr (namei) ¶

Dict_merge (i) ¶

Giống như
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
65 nhưng tăng một ngoại lệ cho các khóa trùng lặp.
(delta)

Load_attr (namei) ¶

Dict_merge (i) ¶

Giống như
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
65 nhưng tăng một ngoại lệ cho các khóa trùng lặp.
(delta)

Load_attr (namei) ¶

Dict_merge (i) ¶

Giống như
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
65 nhưng tăng một ngoại lệ cho các khóa trùng lặp.
(delta)

Load_attr (namei) ¶

Dict_merge (i) ¶

Giống như
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
65 nhưng tăng một ngoại lệ cho các khóa trùng lặp.
(delta)

Nếu TOS là sai, hãy giảm bộ đếm byte bởi delta. Tos được bật lên.

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

Pop_jump_forward_if_not_none (delta) ¶(delta)

Nếu TOS không phải là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, sẽ tăng bộ đếm bytecode của Delta. Tos được bật lên.

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

Pop_jump_forward_if_not_none (delta) ¶(delta)

Nếu TOS không phải là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, sẽ tăng bộ đếm bytecode của Delta. Tos được bật lên.

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

Pop_jump_forward_if_not_none (delta) ¶(delta)

Nếu TOS không phải là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, sẽ tăng bộ đếm bytecode của Delta. Tos được bật lên.

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

Pop_jump_forward_if_not_none (delta) ¶(delta)

Nếu TOS không phải là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, sẽ tăng bộ đếm bytecode của Delta. Tos được bật lên.

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

Pop_jump_backward_if_not_none (delta) ¶(delta)

Nếu TOS không phải là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, hãy giảm bộ đếm byte bằng Delta. Tos được bật lên.

Pop_jump_forward_if_none (delta) ¶

Nếu TOS là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, sẽ tăng bộ đếm bytecode của Delta. Tos được bật lên.The oparg is now a relative delta rather than an absolute target.

Pop_jump_backward_if_none (delta) ¶(delta)

Nếu TOS là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, hãy giảm bộ đếm byte bằng Delta. Tos được bật lên.

Pop_jump_forward_if_none (delta) ¶

Nếu TOS là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, sẽ tăng bộ đếm bytecode của Delta. Tos được bật lên.The oparg is now a relative delta rather than an absolute target.

Pop_jump_backward_if_none (delta) ¶(delta)

Nếu TOS là

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6, hãy giảm bộ đếm byte bằng Delta. Tos được bật lên.iterator. Call its
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
83 method. If this yields a new value, push it on the stack (leaving the iterator below it). If the iterator indicates it is exhausted, TOS is popped, and the byte code counter is incremented by delta.

Jump_if_true_or_pop (delta) ¶(namei)

Nếu TOS là đúng, sẽ tăng bộ đếm bytecode của delta và để lại cho các TOS trên ngăn xếp. Mặt khác (TOS là sai), TOS được bật lên.

Mới trong phiên bản 3.1.If the low bit of

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
85 is set, then a
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 is pushed to the stack before the global variable.

Đã thay đổi trong phiên bản 3.11: OPARG hiện là một đồng bằng tương đối chứ không phải là mục tiêu tuyệt đối.(var_num)

Jump_if_false_or_pop (delta) ¶

Nếu TOS là sai, sẽ tăng bộ đếm bytecode của delta và để lại cho các TOS trên ngăn xếp. Mặt khác (TOS là đúng), TOS được bật lên.(var_num)

For_iter (Delta) ¶

TOS là một người lặp. Gọi phương thức
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
83 của nó. Nếu điều này mang lại một giá trị mới, hãy đẩy nó lên ngăn xếp (để lại bộ lặp bên dưới nó). Nếu bộ lặp cho biết nó đã cạn kiệt, TOS được bật và bộ đếm mã byte được tăng lên bởi Delta.
(var_num)

Load_global (namei) ¶

Tải toàn cầu có tên
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
84 lên ngăn xếp.
(i)

Đã thay đổi trong phiên bản 3.11: Nếu bit thấp của

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
85 được đặt, thì
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 được đẩy vào ngăn xếp trước biến toàn cầu.

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

Load_fast (var_num) ¶(i)

Đẩy một tham chiếu đến

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87 cục bộ lên ngăn xếp.

Store_fast (var_num) ¶

Cửa hàng Tos vào địa phương

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
90 is no longer offset by the length of
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
96.

Delete_fast (var_num) ¶(i)

Xóa cục bộ

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.

Cửa hàng Tos vào địa phương

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
90 is no longer offset by the length of
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
96.

Delete_fast (var_num) ¶(i)

Xóa cục bộ

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.

Make_cell (i) ¶

Cửa hàng Tos vào địa phương

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
90 is no longer offset by the length of
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
96.

Delete_fast (var_num) ¶(i)

Xóa cục bộ

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.

Cửa hàng Tos vào địa phương

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
90 is no longer offset by the length of
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
96.

Delete_fast (var_num) ¶(i)

Xóa cục bộ

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.

Make_cell (i) ¶

Cửa hàng Tos vào địa phương

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
90 is no longer offset by the length of
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
96.

Delete_fast (var_num) ¶(n)

Xóa cục bộ

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
87.

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

Make_cell (i) ¶(argc)

Tạo một ô mới trong khe

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
90. Nếu khe đó trống thì giá trị đó được lưu trữ vào ô mới.

  • Load_clocution (i) ¶

  • Đẩy một tham chiếu đến ô có trong khe

    >>> dis.dis(myfunc)
      2           0 RESUME                   0
    
      3           2 LOAD_GLOBAL              1 (NULL + len)
                 14 LOAD_FAST                0 (alist)
                 16 PRECALL                  1
                 20 CALL                     1
                 30 RETURN_VALUE
    
    90 của bộ lưu trữ của người dân địa phương nhanh. Tên của biến là
    >>> dis.dis(myfunc)
      2           0 RESUME                   0
    
      3           2 LOAD_GLOBAL              1 (NULL + len)
                 14 LOAD_FAST                0 (alist)
                 16 PRECALL                  1
                 20 CALL                     1
                 30 RETURN_VALUE
    
    92.

  • Lưu ý rằng

    >>> dis.dis(myfunc)
      2           0 RESUME                   0
    
      3           2 LOAD_GLOBAL              1 (NULL + len)
                 14 LOAD_FAST                0 (alist)
                 16 PRECALL                  1
                 20 CALL                     1
                 30 RETURN_VALUE
    
    93 thực sự là bí danh cho
    >>> dis.dis(myfunc)
      2           0 RESUME                   0
    
      3           2 LOAD_GLOBAL              1 (NULL + len)
                 14 LOAD_FAST                0 (alist)
                 16 PRECALL                  1
                 20 CALL                     1
                 30 RETURN_VALUE
    
    94. Nó tồn tại để giữ mã byte dễ đọc hơn một chút.

Đã thay đổi trong phiên bản 3.11:
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
90 không còn được bù bởi độ dài
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
96.
(argc)

Load_deref (i) ¶

  • Tải các ô chứa trong khe

    >>> dis.dis(myfunc)
      2           0 RESUME                   0
    
      3           2 LOAD_GLOBAL              1 (NULL + len)
                 14 LOAD_FAST                0 (alist)
                 16 PRECALL                  1
                 20 CALL                     1
                 30 RETURN_VALUE
    
    90 của bộ lưu trữ của người dân địa phương nhanh. Đẩy một tham chiếu đến đối tượng mà ô chứa trên ngăn xếp.

  • Load_classderef (i) ¶

  • Giống như

    >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    00 nhưng trước tiên hãy kiểm tra từ điển của người dân địa phương trước khi tham khảo ý kiến ​​của tế bào. Điều này được sử dụng để tải các biến miễn phí trong các cơ quan lớp.

  • Mới trong phiên bản 3.4.

or:

  • Load_classderef (i) ¶

  • >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    21

  • Giống như

    >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    00 nhưng trước tiên hãy kiểm tra từ điển của người dân địa phương trước khi tham khảo ý kiến ​​của tế bào. Điều này được sử dụng để tải các biến miễn phí trong các cơ quan lớp.

  • Mới trong phiên bản 3.4.

Store_Deref (i) ¶

Cửa hàng TO vào ô có trong khe

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
90 của bộ lưu trữ của người dân địa phương nhanh.

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

Delete_Deref (i) ¶(flags)

Làm trống tế bào có trong khe

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
90 của bộ lưu trữ của người dân địa phương nhanh. Được sử dụng bởi tuyên bố
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
07.

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

Load_method (namei) ¶(namei)

Tải một phương thức có tên

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
55 từ đối tượng TOS. Tos được bật lên. Mã byte này phân biệt hai trường hợp: nếu TOS có một phương thức có tên chính xác, mã byte đẩy phương thức không liên kết và TOS. TOS sẽ được sử dụng làm đối số đầu tiên (
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
21) bởi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
25 khi gọi phương thức không liên kết. Mặt khác,
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 và đối tượng trả về bằng cách tra cứu thuộc tính được đẩy.

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

Precall (ARGC) ¶(argc)

Tiền tố

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
25. Về mặt logic, đây là một op không. Nó tồn tại để cho phép chuyên môn hóa hiệu quả các cuộc gọi.
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
19 là số lượng đối số như được mô tả trong
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
25.

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

Đẩy_null¶

Đẩy một

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 vào ngăn xếp. Được sử dụng trong chuỗi cuộc gọi để khớp với
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 được đẩy bởi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
36 cho các cuộc gọi không phải phương pháp.

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

Đẩy_null¶(i)

Đẩy một

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 vào ngăn xếp. Được sử dụng trong chuỗi cuộc gọi để khớp với
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 được đẩy bởi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
36 cho các cuộc gọi không phải phương pháp.

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

Đẩy_null¶(flags)

Đẩy một

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 vào ngăn xếp. Được sử dụng trong chuỗi cuộc gọi để khớp với
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 được đẩy bởi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
36 cho các cuộc gọi không phải phương pháp.

  • Kw_names (i) ¶

  • Tiền tố

    >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    37. Lưu trữ một tham chiếu đến
    >>> dis.dis(myfunc)
      2           0 RESUME                   0
    
      3           2 LOAD_GLOBAL              1 (NULL + len)
                 14 LOAD_FAST                0 (alist)
                 16 PRECALL                  1
                 20 CALL                     1
                 30 RETURN_VALUE
    
    54 vào một biến nội bộ để sử dụng bởi
    >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    25.
    >>> dis.dis(myfunc)
      2           0 RESUME                   0
    
      3           2 LOAD_GLOBAL              1 (NULL + len)
                 14 LOAD_FAST                0 (alist)
                 16 PRECALL                  1
                 20 CALL                     1
                 30 RETURN_VALUE
    
    54 phải là một bộ dây.

  • Make_function (cờ) ¶

  • Đẩy một đối tượng chức năng mới trên ngăn xếp. Từ dưới lên trên, ngăn xếp được tiêu thụ phải bao gồm các giá trị nếu đối số mang giá trị cờ được chỉ định

  • >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    41 Một bộ giá trị mặc định cho các tham số chỉ định vị và vị trí theo thứ tự vị trí theo thứ tự vị trí

  • >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    42 Một từ điển của các tham số chỉ từ khóa Giá trị mặc địnhqualified name of the function (at TOS)

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
43 Một bộ chuỗi chứa các tham số Chú thíchFlag value
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
43 is a tuple of strings instead of dictionary

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
44 Một tuple chứa các ô cho các biến miễn phí, đóng cửa
(argc)

Mã liên quan đến hàm (tại TOS1)

Tên đủ điều kiện của hàm (tại TOS)(ext)

Thay đổi trong phiên bản 3.10: Giá trị cờ

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
43 là một bộ chuỗi thay vì từ điển

Build_slice (argc) ¶(flags)

Đẩy một đối tượng lát trên ngăn xếp. Argc phải là 2 hoặc 3. Nếu là 2,

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
46 được đẩy; Nếu là 3,
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
47 được đẩy. Xem chức năng tích hợp
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
48 để biết thêm thông tin.

  • Extended_arg (ext) ¶

  • Tiền tố bất kỳ opcode nào có đối số quá lớn để phù hợp với một byte mặc định. EXT giữ một byte bổ sung hoạt động như các bit cao hơn trong đối số. Đối với mỗi opcode, nhiều nhất là ba tiền tố

    >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    49 được cho phép, tạo thành một đối số từ hai byte đến bốn byte.

  • Format_value (cờ) ¶

  • Được sử dụng để thực hiện các chuỗi theo nghĩa đen được định dạng (F-String). Bật một fmt_spec tùy chọn từ ngăn xếp, sau đó là một giá trị cần thiết. Cờ được giải thích như sau:

  • >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    50: Giá trị được định dạng AS-IS.

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
51: Gọi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
52 trên giá trị trước khi định dạng nó.

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

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
53: Gọi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
54 về giá trị trước khi định dạng nó.
(count)

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
55: Gọi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
56 về giá trị trước khi định dạng nó.

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
57: pop fmt_spec từ ngăn xếp và sử dụng nó, khác sử dụng fmt_spec trống.

Định dạng được thực hiện bằng cách sử dụng

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
58. Kết quả được đẩy trên ngăn xếp.

Match_Class (đếm) ¶Previously, this instruction also pushed a boolean value indicating success (

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
9) or failure (Include/opcode.h9).

TOS là một bộ thuật của tên thuộc tính từ khóa, TOS1 là lớp được khớp với và TOS2 là chủ đề phù hợp. Đếm là số lượng mẫu phụ vị trí.(where)

Pop Tos, Tos1 và Tos2. Nếu TOS2 là một thể hiện của TOS1 và có các thuộc tính vị trí và từ khóa theo yêu cầu của Count và Tos, hãy đẩy một bộ các thuộc tính được trích xuất. Nếu không, đẩy

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
6.

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

  • Đã thay đổi trong phiên bản 3.11: Trước đây, hướng dẫn này cũng đã thúc đẩy giá trị boolean biểu thị thành công (

    >>> dis.dis(myfunc)
      2           0 RESUME                   0
    
      3           2 LOAD_GLOBAL              1 (NULL + len)
                 14 LOAD_FAST                0 (alist)
                 16 PRECALL                  1
                 20 CALL                     1
                 30 RETURN_VALUE
    
    9) hoặc thất bại (Include/opcode.h9).

  • Tiếp tục (ở đâu) ¶

  • Một không có. Thực hiện theo dõi nội bộ, gỡ lỗi và kiểm tra tối ưu hóa.

  • Nhiệm vụ dis9 đánh dấu trong đó xảy ra

    >>> bytecode = dis.Bytecode(myfunc)
    >>> for instr in bytecode:
    ...     print(instr.opname)
    ...
    RESUME
    LOAD_GLOBAL
    LOAD_FAST
    PRECALL
    CALL
    RETURN_VALUE
    
    63:

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

Đẩy_null¶

Đẩy một

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 vào ngăn xếp. Được sử dụng trong chuỗi cuộc gọi để khớp với
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 được đẩy bởi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
36 cho các cuộc gọi không phải phương pháp.

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

Đẩy_null¶

Đẩy một

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 vào ngăn xếp. Được sử dụng trong chuỗi cuộc gọi để khớp với
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 được đẩy bởi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
36 cho các cuộc gọi không phải phương pháp.

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

Đẩy_null¶

Đẩy một

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 vào ngăn xếp. Được sử dụng trong chuỗi cuộc gọi để khớp với
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 được đẩy bởi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
36 cho các cuộc gọi không phải phương pháp.

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

Đẩy_null¶

Đẩy một

>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 vào ngăn xếp. Được sử dụng trong chuỗi cuộc gọi để khớp với
>>> dis.dis(myfunc)
  2           0 RESUME                   0

  3           2 LOAD_GLOBAL              1 (NULL + len)
             14 LOAD_FAST                0 (alist)
             16 PRECALL                  1
             20 CALL                     1
             30 RETURN_VALUE
86 được đẩy bởi
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
36 cho các cuộc gọi không phải phương pháp.

Kw_names (i) ¶Now every instruction has an argument, but opcodes

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
75 ignore it. Before, only opcodes
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
76 had an argument.

Tiền tố >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE 37. Lưu trữ một tham chiếu đến >>> dis.dis(myfunc) 2 0 RESUME 0 3 2 LOAD_GLOBAL 1 (NULL + len) 14 LOAD_FAST 0 (alist) 16 PRECALL 1 20 CALL 1 30 RETURN_VALUE 54 vào một biến nội bộ để sử dụng bởi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE 25. >>> dis.dis(myfunc) 2 0 RESUME 0 3 2 LOAD_GLOBAL 1 (NULL + len) 14 LOAD_FAST 0 (alist) 16 PRECALL 1 20 CALL 1 30 RETURN_VALUE 54 phải là một bộ dây.

Make_function (cờ) ¶

Đẩy một đối tượng chức năng mới trên ngăn xếp. Từ dưới lên trên, ngăn xếp được tiêu thụ phải bao gồm các giá trị nếu đối số mang giá trị cờ được chỉ địnhopname

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
41 Một bộ giá trị mặc định cho các tham số chỉ định vị và vị trí theo thứ tự vị trí theo thứ tự vị trí

>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
...     print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST
PRECALL
CALL
RETURN_VALUE
42 Một từ điển của các tham số chỉ từ khóa Giá trị mặc định
opmap

Tên lập bản đồ từ điển Tên hoạt động cho byte.

dis.cmp_op¶cmp_op

Trình tự của tất cả các tên hoạt động so sánh.

dis.hasconst¶hasconst

Trình tự bytecodes truy cập một hằng số.

dis.hasfree¶hasfree

Trình tự các mã byte truy cập một biến miễn phí (lưu ý rằng 'miễn phí' trong bối cảnh này đề cập đến các tên trong phạm vi hiện tại được tham chiếu bởi phạm vi bên trong hoặc tên trong phạm vi bên ngoài được tham chiếu từ phạm vi này. Nó không bao gồm các tham chiếu đến toàn cầu hoặc toàn cầu hoặcPhạm vi xây dựng).

dis.hasname¶hasname

Trình tự bytecodes truy cập một thuộc tính theo tên.

dis.hasjrel¶hasjrel

Trình tự các byte có mục tiêu nhảy tương đối.

dis.hasjabs¶hasjabs

Trình tự các byte có mục tiêu nhảy tuyệt đối.

dis.haslocal¶haslocal

Trình tự bytecodes truy cập một biến cục bộ.

dis.hascompare¶hascompare

Trình tự byte của các hoạt động boolean.