Hướng dẫn can python bytecode be decompiled? - Python bytecode có thể được dịch ngược không?

Đã hỏi 13 năm, 3 tháng trước 13 years, 3 months ago

Đã xem 32k lần 32k times

Giả sử tôi có:

>>> def test(a):    
>>>    print a

Bây giờ, tôi muốn khám phá xem thử nghiệm trông như thế nào ở dạng được biên dịch của nó.

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'

Tôi có thể nhận được biểu mẫu được tháo rời bằng mô -đun DIS:dis module:

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE

Có một trình phân hủy opensource và duy trì mà tôi có thể sử dụng để biến mã byte trở lại mã Python có thể đọc được không?

CẬP NHẬT: Cảm ơn vì đã đề xuất sự phân hủy, nhưng nó đã lỗi thời (Python2.3) và không ai duy trì nó nữa. Có gì cho Python2,5 trở lên không?

Hướng dẫn can python bytecode be decompiled? - Python bytecode có thể được dịch ngược không?

đá

7,0013 huy hiệu vàng30 huy hiệu bạc70 huy hiệu đồng3 gold badges30 silver badges70 bronze badges

hỏi ngày 19 tháng 7 năm 2009 lúc 8:59Jul 19, 2009 at 8:59

Nhận unmompyle2 từ GitHub! :)

Đã trả lời ngày 19 tháng 6 năm 2012 lúc 14:06Jun 19, 2012 at 14:06

Hiện tại cũng có uncompyle6 và phân hủy hẹp hơn (đối với Python 3.7 và 3,8 và không được đóng gói). Cả hai đều được viết bằng Python. Ngoài ra còn có PYCDC được viết bằng C ++.

Chúng xử lý một số phiên bản của mã byte Python bắt đầu từ Python 1 và sẽ chuyển đến Python 3 phiên bản, ngoại trừ khi được ghi chú ở trên.

Một điều khác bạn có thể xem xét là một trình thông dịch mã byte cho phép bạn theo dõi và/hoặc bước hướng dẫn mã byte.

Đối với điều này, có X-Python cho người phiên dịch và Trepanxpy là trình gỡ lỗi giống như GDB cho điều đó. Xem các liên kết cho các phiên bản mã byte Python được giải thích và cần các phiên bản Python nào để chạy trình thông dịch.

Đã trả lời ngày 25 tháng 5 năm 2016 lúc 14:50May 25, 2016 at 14:50

Rockyrockyrocky

7,0013 huy hiệu vàng30 huy hiệu bạc70 huy hiệu đồng3 gold badges30 silver badges70 bronze badges

hỏi ngày 19 tháng 7 năm 2009 lúc 8:59

Nhận unmompyle2 từ GitHub! :)

Đã trả lời ngày 19 tháng 6 năm 2012 lúc 14:06Jul 19, 2009 at 9:06

Hiện tại cũng có uncompyle6 và phân hủy hẹp hơn (đối với Python 3.7 và 3,8 và không được đóng gói). Cả hai đều được viết bằng Python. Ngoài ra còn có PYCDC được viết bằng C ++.Shay Erlichmen

Chúng xử lý một số phiên bản của mã byte Python bắt đầu từ Python 1 và sẽ chuyển đến Python 3 phiên bản, ngoại trừ khi được ghi chú ở trên.7 gold badges66 silver badges87 bronze badges

1

Một điều khác bạn có thể xem xét là một trình thông dịch mã byte cho phép bạn theo dõi và/hoặc bước hướng dẫn mã byte.

https://github.com/wibiti/uncompyle2

Đối với điều này, có X-Python cho người phiên dịch và Trepanxpy là trình gỡ lỗi giống như GDB cho điều đó. Xem các liên kết cho các phiên bản mã byte Python được giải thích và cần các phiên bản Python nào để chạy trình thông dịch.

>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
...   uncompyle2.uncompyle_file("compiled.pyc",f)

Đã trả lời ngày 25 tháng 5 năm 2016 lúc 14:50

RockyrockyOct 9, 2013 at 9:56

phân hủyDevC

Decompyle là một trình phân tách và phân hủy python chuyển đổi mã byte python (.pyc hoặc .pyo) trở lại thành nguồn python tương đương. Xác minh mã được sản xuất (được biên dịch lại) cũng có giá trị.9 gold badges38 silver badges56 bronze badges

Đã trả lời ngày 19 tháng 7 năm 2009 lúc 9:06

  1. Shay Erlichmenshay Erlichmen

  2. 31.5K7 Huy hiệu vàng66 Huy hiệu bạc87 Huy hiệu đồng

    Uncompyle2 đã làm việc cho tôi với Python 2.7.

  3. Nhanh chóng sử dụng uncompyle2, cài đặt nó và sau đó

    Nó sẽ tạo mã nguồn trở lại trong dists.py

    Đã trả lời ngày 9 tháng 10 năm 2013 lúc 9:56

    Devcdevc

6.6959 Huy hiệu vàng38 Huy hiệu bạc56 Huy hiệu ĐồngJan 26, 2014 at 16:30

Ngoài những gì Devc đã viết:Maxim

UNCOMPYLE2 hoạt động với Python 2.72 silver badges4 bronze badges

Chạy uncompyle6 từ dấu nhắc lệnh windows. .... Lib/dis.py


Tàn phá. ....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.

8 Phải có tiện ích mở rộng Google Chrome để tiết kiệm giờ làm việc thành vài phút. .... 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.

13 Kịch bản Python nâng cao cho lập trình hàng ngày ..Use 2 bytes for each instruction. Previously the number of bytes varied by instruction.

Bạn có thể đảo ngược PYC?The argument of jump, exception handling and loop instructions is now the instruction offset rather than the byte offset.

Có, bạn có thể nhận được nó với Unpyclib có thể tìm thấy trên PYPI.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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
0 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
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
2.

Mã nguồn: lib/dis.py

def myfunc(alist):
    return len(alist)

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.

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

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.

Đã 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.

Đã 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.

Đã 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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
0 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
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
2.

Ví dụ: Cho chức năng
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
3:
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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
6).

Đâ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à

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
7, khi lặp lại một trường hợp
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
5 mang lại các hoạt động của mã byte như các trường hợp
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
9.

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

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0, nó chỉ ra số dòng phải đượ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à

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0, nó đề cập đến một lệnh bù trong mã tháo rời. Cài đặt điều này có nghĩa là
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
2 sẽ hiển thị đ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à

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
3,
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
2 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à

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
3,
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
2 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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
5 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

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
8, 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ư

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
9.

Đã 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 chức năng phân tích sau đây chuyển đổi đầu vào trực tiếp thành đầ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 chức năng phân tích sau đây chuyển đổi đầu vào trực tiếp thành đầ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.

dis.show_code (x, *, file = none) ¶Added file parameter.

In thông tin đối tượng mã chi tiết cho hàm, phương thức, chuỗi mã nguồn hoặc đối tượng mã vào tệp (hoặc
>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
...   uncompyle2.uncompyle_file("compiled.pyc",f)
1 nếu không được chỉ định tệp).
dis(x=None, *, file=None, depth=None, show_caches=False, adaptive=False)

Đây là một tốc ký thuận tiện cho

>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
...   uncompyle2.uncompyle_file("compiled.pyc",f)
2, dành cho khám phá tương tác tại dấu nhắc phiên dịch.

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

dis.dis (x = none, *, file = none, septth = none, show_caches = false, formedive = 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 chức năng tích hợp

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
6 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

>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
...   uncompyle2.uncompyle_file("compiled.pyc",f)
1 khác.

dis.show_code (x, *, file = none) ¶Added file parameter.

In thông tin đối tượng mã chi tiết cho hàm, phương thức, chuỗi mã nguồn hoặc đối tượng mã vào tệp (hoặc

>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
...   uncompyle2.uncompyle_file("compiled.pyc",f)
1 nếu không được chỉ định tệp).Implemented recursive disassembling and added depth parameter.

Đã 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.

Chức năng phân tíchdistb(tb=None, *, file=None, show_caches=False, adaptive=False)

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.

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

>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
...   uncompyle2.uncompyle_file("compiled.pyc",f)
1 khác.

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

Đã 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.

dis.disassemble (code, lasti = -1, *, file = none, show_caches = false, formedive = false) ) ¶disassemble(code, lasti=- 1, *, file=None, show_caches=False, adaptive=False)dis.disco(code, lasti=- 1, *, file=None, show_caches=False, adaptive=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:

  1. số dòng, cho hướng dẫn đầu tiên của mỗi dòng

  2. Hướng dẫn hiện tại, được chỉ định là

    def myfunc(alist):
        return len(alist)
    
    0,

  3. một hướng dẫn được dán nhãn, được chỉ định với

    def myfunc(alist):
        return len(alist)
    
    1,

  4. địa chỉ của hướng dẫn,

  5. Tên mã hoạt động,

  6. tham số hoạt động và

  7. Giải thích các tham số trong ngoặc đơn.

Giải thích tham số nhận ra tên biến cục bộ và toàn cầu, giá trị không đổi, mục tiêu nhánh và so sánh các toán tử.

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

>>>import uncompyle2
>>> with open("decompiled.py","wb") as f:
...   uncompyle2.uncompyle_file("compiled.pyc",f)
1 khác.

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

Đã 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.

dis.disassemble (code, lasti = -1, *, file = none, show_caches = false, formedive = false) ) ¶get_instructions(x, *, first_line=None, show_caches=False, adaptive=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:

số dòng, cho hướng dẫn đầu tiên của mỗi dòng

Hướng dẫn hiện tại, được chỉ định là

def myfunc(alist):
    return len(alist)
0,

một hướng dẫn được dán nhãn, được chỉ định với

def myfunc(alist):
    return len(alist)
1,

địa chỉ của hướng dẫn,

Đã 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.

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

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:

số dòng, cho hướng dẫn đầu tiên của mỗi dòngLine numbers can be decreasing. Before, they were always increasing.

Hướng dẫn hiện tại, được chỉ định là

def myfunc(alist):
    return len(alist)
0,The PEP 626
def myfunc(alist):
    return len(alist)
6 method is used instead of the
def myfunc(alist):
    return len(alist)
9 and
>>> 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
0 attributes of the code object.

một hướng dẫn được dán nhãn, được chỉ định với
def myfunc(alist):
    return len(alist)
1,
findlabels(code)

địa chỉ của hướng dẫn,

Tên mã hoạt động,stack_effect(opcode, oparg=None, *, jump=None)

tham số hoạt động và

Giải thích các tham số trong ngoặc đơn.

địa chỉ của hướng dẫn,

Tên mã hoạt động,Added jump parameter.

tham số hoạt động và

Giải thích các tham số trong ngoặc đơn.

Giải thích tham số nhận ra tên biến cục bộ và toàn cầu, giá trị không đổi, mục tiêu nhánh và so sánh các toán tử.dis.Instruction

dis.get_instructions (x, *, first_line = none, show_caches = false

Trả về trình lặp qua các hướng dẫn trong hàm, phương thức, chuỗi mã nguồn hoặc đối tượng mã được cung cấp.

Trình lặp tạo ra một loạt các bộ

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
9 có tên là cung cấp các chi tiết của từng hoạt động trong mã được cung cấp.Opcode collections.

Nếu First_line không phải là
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0, nó chỉ ra số dòng phải đượ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.

Các tham số show_caches và thích ứng hoạt động như chúng trong

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
2.

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

dis.findlinestarts (mã) ¶

Hàm trình tạo này sử dụng phương thức
def myfunc(alist):
    return len(alist)
6 của mã đối tượng mã để tìm các độ lệch là bắt đầu của các dòng trong mã nguồn. Chúng được tạo ra dưới dạng các cặp
def myfunc(alist):
    return len(alist)
7.

Thay đổi trong phiên bản 3.6: Số dòng có thể giảm. Trước đây, họ luôn luôn tăng lên.

Đã thay đổi trong phiên bản 3.10: Phương thức PEP 626
def myfunc(alist):
    return len(alist)
6 được sử dụng thay vì các thuộc tính
def myfunc(alist):
    return len(alist)
9 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
0 của đối tượng mã.

dis.findlabels (mã) ¶

Phát hiện tất cả các độ lệch trong mã chuỗi ByteCode được biên dịch là các mục tiêu nhảy và trả về một danh sách các độ lệch này.

dis.stack_effect (opcode, oparg = none, *, jump = none) ¶

Tính hiệu ứng ngăn xếp của opcode với đối số oparg.

Nếu mã có mục tiêu nhảy và nhảy là

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
3,
>>> 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 sẽ trả về hiệu ứng ngăn xếp của nhảy. Nếu nhảy 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, nó sẽ trả về hiệu ứng ngăn xếp của việc không nhảy. Và nếu nhảy là
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0 (mặc định), nó sẽ trả về hiệu ứng ngăn xếp tối đa của cả hai trường hợp.

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

Hướng dẫn mã byte Python

Hàm
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
7 và lớp
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
5 cung cấp chi tiết về các hướng dẫn mã byte như
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
9 Các phiên bản:

classdis.InsrionStions¶

địa chỉ của hướng dẫn,

Tên mã hoạt động,Field

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

tham số hoạt động vàdis.Positions

Giải thích các tham số trong ngoặc đơn.

Giải thích tham số nhận ra tên biến cục bộ và toàn cầu, giá trị không đổi, mục tiêu nhánh và so sánh các toán tử.end_linenocol_offsetend_col_offset

dis.get_instructions (x, *, first_line = none, show_caches = false

Trả về trình lặp qua các hướng dẫn trong hàm, phương thức, chuỗi mã nguồn hoặc đối tượng mã được cung cấp.

Trình lặp tạo ra một loạt các bộ

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
9 có tên là cung cấp các chi tiết của từng hoạt động trong mã được cung cấp.

Nếu First_line không phải là
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0, nó chỉ ra số dòng phải đượ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.

Các tham số show_caches và thích ứng hoạt động như chúng trong

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
2.

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

dis.findlinestarts (mã) ¶

Hàm trình tạo này sử dụng phương thức
def myfunc(alist):
    return len(alist)
6 của mã đối tượng mã để tìm các độ lệch là bắt đầu của các dòng trong mã nguồn. Chúng được tạo ra dưới dạng các cặp
def myfunc(alist):
    return len(alist)
7.
(i)

Thay đổi trong phiên bản 3.6: Số dòng có thể giảm. Trước đây, họ luôn luôn tăng lên.

dis.get_instructions (x, *, first_line = none, show_caches = false

Trả về trình lặp qua các hướng dẫn trong hàm, phương thức, chuỗi mã nguồn hoặc đối tượng mã được cung cấp.(i)

Trình lặp tạo ra một loạt các bộ

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
9 có tên là cung cấp các chi tiết của từng hoạt động trong mã được cung cấp.

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

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
0.

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.

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

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

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

Unary_negative¶

Thực hiện

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

Unary_not¶

Thực hiện dis0.

Unary_invert¶

Thực hiện dis1.

Get_iter¶

Thực hiện dis2.

Get_yield_from_iter¶

Nếu dis3 là một trình lặp máy phát điện hoặc đối tượng coroutine thì nó còn lại như vậy. Nếu không, thực hiện dis2.generator iterator or coroutine object it is left as is. Otherwise, implements dis2.

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

Hoạt động nhị phân và tại chỗ

Các hoạt động nhị phân loại bỏ đỉnh của ngăn xếp (TOS) và mục ngăn xếp hàng đầu thứ hai (TOS1) khỏi ngăn xếp. Họ thực hiện hoạt động, và đặt kết quả trở lại trên ngăn xếp.

Các hoạt động tại chỗ giống như các hoạt động nhị phân, trong đó chúng loại bỏ TOS và TOS1, và đẩy kết quả trở lại vào ngăn xếp, nhưng hoạt động được thực hiện tại chỗ khi TOS1 hỗ trợ nó và có thể là) Tos1 ban đầu.

Binary_op (op) ¶(op)

Thực hiện các toán tử nhị phân và tại chỗ (tùy thuộc vào giá trị của OP).

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

Binary_Subscr¶

Thực hiện dis5.

Store_subcr¶

Thực hiện dis6.

Delete_subscr¶

Thực hiện dis7.

Opcodes Coroutine

Get_awaitable (ở đâu) ¶(where)

Thực hiện dis8, trong đó dis9 trả về Include/opcode.h0 nếu Include/opcode.h0 là đối tượng coroutine hoặc đối tượng máy phát với cờ co_iterable_coroutine hoặc giải quyết Include/opcode.h2.

Nếu toán hạng Include/opcode.h3 không khác biệt, nó sẽ chỉ ra nơi hướng dẫn xảy ra:

  • Include/opcode.h4 Sau khi gọi đến Include/opcode.h5

  • Include/opcode.h6 sau khi gọi đến Include/opcode.h7

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

Hoạt động nhị phân và tại chỗPreviously, this instruction did not have an oparg.

Các hoạt động nhị phân loại bỏ đỉnh của ngăn xếp (TOS) và mục ngăn xếp hàng đầu thứ hai (TOS1) khỏi ngăn xếp. Họ thực hiện hoạt động, và đặt kết quả trở lại trên ngăn xếp.

Các hoạt động tại chỗ giống như các hoạt động nhị phân, trong đó chúng loại bỏ TOS và TOS1, và đẩy kết quả trở lại vào ngăn xếp, nhưng hoạt động được thực hiện tại chỗ khi TOS1 hỗ trợ nó và có thể là) Tos1 ban đầu.

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

Hoạt động nhị phân và tại chỗReturning awaitable objects from Include/opcode.h9 is no longer supported.

Các hoạt động nhị phân loại bỏ đỉnh của ngăn xếp (TOS) và mục ngăn xếp hàng đầu thứ hai (TOS1) khỏi ngăn xếp. Họ thực hiện hoạt động, và đặt kết quả trở lại trên ngăn xếp.

Các hoạt động tại chỗ giống như các hoạt động nhị phân, trong đó chúng loại bỏ TOS và TOS1, và đẩy kết quả trở lại vào ngăn xếp, nhưng hoạt động được thực hiện tại chỗ khi TOS1 hỗ trợ nó và có thể là) Tos1 ban đầu.

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

Hoạt động nhị phân và tại chỗ

Các hoạt động nhị phân loại bỏ đỉnh của ngăn xếp (TOS) và mục ngăn xếp hàng đầu thứ hai (TOS1) khỏi ngăn xếp. Họ thực hiện hoạt động, và đặt kết quả trở lại trên ngăn xếp.

Các hoạt động tại chỗ giống như các hoạt động nhị phân, trong đó chúng loại bỏ TOS và TOS1, và đẩy kết quả trở lại vào ngăn xếp, nhưng hoạt động được thực hiện tại chỗ khi TOS1 hỗ trợ nó và có thể là) Tos1 ban đầu.

Binary_op (op) ¶Exception representation on the stack now consist of one, not three, items.

Thực hiện các toán tử nhị phân và tại chỗ (tùy thuộc vào giá trị của OP).

Binary_Subscr¶

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

Hoạt động nhị phân và tại chỗ

Các hoạt động nhị phân loại bỏ đỉnh của ngăn xếp (TOS) và mục ngăn xếp hàng đầu thứ hai (TOS1) khỏi ngăn xếp. Họ thực hiện hoạt động, và đặt kết quả trở lại trên ngăn xếp.

Các hoạt động tại chỗ giống như các hoạt động nhị phân, trong đó chúng loại bỏ TOS và TOS1, và đẩy kết quả trở lại vào ngăn xếp, nhưng hoạt động được thực hiện tại chỗ khi TOS1 hỗ trợ nó và có thể là) Tos1 ban đầu.

Binary_op (op) ¶(i)

Thực hiện các toán tử nhị phân và tại chỗ (tùy thuộc vào giá trị của OP).

Binary_Subscr¶(i)

Thực hiện dis5.

Store_subcr¶(i)

Thực hiện dis6.

Delete_subscr¶

Thực hiện dis7.Map value is TOS and map key is TOS1. Before, those were reversed.

Opcodes Coroutine

Get_awaitable (ở đâu) ¶

Thực hiện dis8, trong đó dis9 trả về Include/opcode.h0 nếu Include/opcode.h0 là đối tượng coroutine hoặc đối tượng máy phát với cờ co_iterable_coroutine hoặc giải quyết Include/opcode.h2.

Nếu toán hạng Include/opcode.h3 không khác biệt, nó sẽ chỉ ra nơi hướng dẫn xảy ra:

Include/opcode.h4 Sau khi gọi đến Include/opcode.h5generator.

Include/opcode.h6 sau khi gọi đến Include/opcode.h7

Đã thay đổi trong phiên bản 3.11: Trước đây, hướng dẫn này không có OPARG.variable annotations statically.

Get_aiter¶

Thực hiện Include/opcode.h8.

Thay đổi trong phiên bản 3.7: Trả về các đối tượng có thể chờ từ Include/opcode.h9 không còn được hỗ trợ.

Get_anext¶

Đẩy CACHE0 vào ngăn xếp. Xem CACHE1 để biết chi tiết về CACHE2.

Binary_op (op) ¶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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
11 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.

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
12. 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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
12. 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.

Check_eg_match¶

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

Check_exc_match¶

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
12. 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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
12. 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.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.The

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
20 function is in position 4 of the stack rather than 7. Exception representation on the stack now consist of one, not three, items.

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.

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

Check_exc_match¶

Thực hiện khớp ngoại lệ cho
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
12. 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.
(delta)

Check_eg_match¶

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

Check_exc_match¶

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
12. 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.

Check_eg_match¶

Thực hiện khớp ngoại lệ cho
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
13. Áp dụng
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
14 trên nhóm ngoại lệ đại diện cho TOS1.

Trong trường hợp của một trận đấu, bật hai mục từ ngăn xếp và đẩy phân nhóm không phù hợp (

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0 trong trường hợp trận đấu đầy đủ) theo sau là phân nhóm phù hợp. Khi không có khớp, bật một mục (loại khớp) và đẩy
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0.

Check_eg_match¶

Thực hiện khớp ngoại lệ cho
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
13. Áp dụng
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
14 trên nhóm ngoại lệ đại diện cho TOS1.

Trong trường hợp của một trận đấu, bật hai mục từ ngăn xếp và đẩy phân nhóm không phù hợp (

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0 trong trường hợp trận đấu đầy đủ) theo sau là phân nhóm phù hợp. Khi không có khớp, bật một mục (loại khớp) và đẩy
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0.

Check_eg_match¶

Thực hiện khớp ngoại lệ cho
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
13. Áp dụng
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
14 trên nhóm ngoại lệ đại diện cho TOS1.

Trong trường hợp của một trận đấu, bật hai mục từ ngăn xếp và đẩy phân nhóm không phù hợp (

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0 trong trường hợp trận đấu đầy đủ) theo sau là phân nhóm phù hợp. Khi không có khớp, bật một mục (loại khớp) và đẩy
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0.

Check_eg_match¶

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
13. Áp dụng
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
14 trên nhóm ngoại lệ đại diện cho TOS1.Previously, this instruction also pushed a boolean value indicating success (
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
3) or failure (
>>> 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).

Trong trường hợp của một trận đấu, bật hai mục từ ngăn xếp và đẩy phân nhóm không phù hợp (
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0 trong trường hợp trận đấu đầy đủ) theo sau là phân nhóm phù hợp. Khi không có khớp, bật một mục (loại khớp) và đẩy
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0.
(namei)

Prep_reraise_star¶

Kết hợp danh sách ngoại lệ được nâng lên và reraised từ TOS, thành một nhóm ngoại lệ để tuyên truyền từ một khối Ext-Except*. Sử dụng nhóm ngoại lệ ban đầu từ TOS1 để xây dựng lại cấu trúc của các ngoại lệ được reraised. Bật hai mục từ ngăn xếp và đẩy ngoại lệ đến Reraise hoặc
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0 nếu có một.
(namei)

Với_except_start¶

Gọi hàm ở vị trí 4 trên ngăn xếp với các đối số (loại, val, tb) đại diện cho ngoại lệ ở đầu ngăn xếp. Được sử dụng để thực hiện cuộc gọi
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
18 khi một ngoại lệ đã xảy ra trong tuyên bố
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
19.
(count)

Đã thay đổi trong phiên bản 3.11: Hàm

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
20 ở vị trí 4 của ngăn xếp thay vì 7. Biểu diễn ngoại lệ trên ngăn xếp hiện bao gồm một, không phải ba, các mục.

Load_asserter_error¶(counts)

Đẩy

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
21 lên ngăn xếp. Được sử dụng bởi tuyên bố
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
22.

Load_Build_Class¶¶

Đẩy
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
23 lên ngăn xếp. Sau đó, nó được gọi để xây dựng một lớp.
(namei)

Trước_with (Delta) ¶

Opcode này thực hiện một số hoạt động trước khi một khối bắt đầu. Đầu tiên, nó tải
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
24 từ trình quản lý ngữ cảnh và đẩy nó lên ngăn xếp để sử dụng sau này bởi
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
25. Sau đó,
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
26 được gọi. Cuối cùng, kết quả của việc gọi phương thức
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
26 được đẩy lên ngăn xếp.
(namei)

Get_len¶

Đẩy
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
28 lên ngăn xếp.
(namei)

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

Match_mapping¶(namei)

Nếu TOS là một ví dụ là

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
29 (hoặc, về mặt kỹ thuật hơn: nếu nó có cờ
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
30 được đặt trong
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
31), hãy đẩy
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
3 lên ngăn xếp. 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
3.

Match_sesechence¶(consti)

Nếu TOS là một ví dụ là

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
34 và không phải là một ví dụ là ____ 135/________ 136/________ 137 (hoặc, về mặt kỹ thuật hơn: nếu nó có cờ
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
38 được đặt trong
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
31), hãy đẩy
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
3 lên ngăn xếp. 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
3.

Match_Keys¶(namei)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
59 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ư

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
60, nhưng tạo một danh sách.

Build_set (đếm) ¶(count)

Hoạt động như

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
60, 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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
62 Các mục để từ điển giữ các mục nhập:
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
63.

Đã 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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
64 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ừ
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
65, 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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
66. Được sử dụng để xây dựng danh sách.

Set_update (i) ¶(invert)

Gọi

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
67. Đượ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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
66. Được sử dụng để xây dựng danh sách.

Set_update (i) ¶(delta)

Gọi

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
67. Được sử dụng để xây dựng các bộ.

Dict_update (i) ¶(delta)

Gọi

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
68. Được sử dụng để xây dựng các dicts.

Dict_merge (i) ¶

Giống như
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 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ư
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 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ư
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 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ư
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 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ư
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 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ư
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 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ư
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 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ư
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 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ư
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 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ư
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
69 nhưng tăng một ngoại lệ cho các khóa trùng lặp.
(delta)

Load_attr (namei) ¶

Thay thế TOS bằng

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
70.

Compare_op (opname) ¶The oparg is now a relative delta rather than an absolute target.

Thực hiện một hoạt động boolean. Tên hoạt động có thể được tìm thấy trong
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
71.
(delta)

Is_op (đảo ngược) ¶

Thay thế TOS bằng

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
70.

Compare_op (opname) ¶The oparg is now a relative delta rather than an absolute target.

Thực hiện một hoạt động boolean. Tên hoạt động có thể được tìm thấy trong
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
71.
(delta)

Is_op (đảo ngược) ¶iterator. Call its

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
87 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.

Thực hiện so sánh
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
72, hoặc
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
73 nếu
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
74 là 1.
(namei)

Chứa_op (đảo ngược) ¶

Thực hiện so sánh

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
75, hoặc
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
76 nếu
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
74 là 1.If the low bit of
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
89 is set, then a
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
90 is pushed to the stack before the global variable.

Load_fast (var_num) ¶(var_num)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
91 cục bộ lên ngăn xếp.

Store_fast (var_num) ¶(var_num)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
91.

Delete_fast (var_num) ¶(var_num)

Xóa cục bộ

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
91.

Make_cell (i) ¶(i)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94. Nếu khe đó trống thì giá trị đó được lưu trữ vào ô mới.

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

Load_clocution (i) ¶(i)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 của bộ lưu trữ của người dân địa phương nhanh. Tên của biến là
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
96.

Lưu ý rằng

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
97 thực sự là bí danh cho
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
98. 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:

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 không còn được bù bởi độ dài
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 is no longer offset by the length of
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.

Load_deref (i) ¶(i)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 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.

Đã thay đổi trong phiên bản 3.11:

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 không còn được bù bởi độ dài
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 is no longer offset by the length of
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.

Load_deref (i) ¶(i)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 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) ¶

Đã thay đổi trong phiên bản 3.11:

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 không còn được bù bởi độ dài
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 is no longer offset by the length of
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.

Load_deref (i) ¶(i)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 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.

Đã thay đổi trong phiên bản 3.11:

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 không còn được bù bởi độ dài
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 is no longer offset by the length of
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.

Load_deref (i) ¶(i)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 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) ¶

Đã thay đổi trong phiên bản 3.11:

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 không còn được bù bởi độ dài
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 is no longer offset by the length of
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.

Load_deref (i) ¶(n)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 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.

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

Load_clocution (i) ¶(argc)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 của bộ lưu trữ của người dân địa phương nhanh. Tên của biến là
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
96.

  • Lưu ý rằng

    >>> test.func_code.co_code
    '|\x00\x00GHd\x00\x00S'
    
    97 thực sự là bí danh cho
    >>> test.func_code.co_code
    '|\x00\x00GHd\x00\x00S'
    
    98. 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:

    >>> test.func_code.co_code
    '|\x00\x00GHd\x00\x00S'
    
    94 không còn được bù bởi độ dài
    >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    00.

  • Load_deref (i) ¶

Tải các ô chứa trong khe
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 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.
(argc)

Load_classderef (i) ¶

  • Giống như

    >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    04 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 ​​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ác cửa hàng TO vào ô có trong khe

    >>> test.func_code.co_code
    '|\x00\x00GHd\x00\x00S'
    
    94 của bộ lưu trữ của người dân địa phương nhanh.

or:

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

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    25

  • Store_Deref (i) ¶

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

    >>> test.func_code.co_code
    '|\x00\x00GHd\x00\x00S'
    
    94 của bộ lưu trữ của người dân địa phương nhanh.

Delete_Deref (i) ¶

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 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ố
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
11.

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

Load_clocution (i) ¶(flags)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 của bộ lưu trữ của người dân địa phương nhanh. Tên của biến là
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
96.

Lưu ý rằng

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
97 thực sự là bí danh cho
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
98. 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:
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 không còn được bù bởi độ dài
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
00.
(namei)

Load_deref (i) ¶

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 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) ¶(argc)

Giống như

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
04 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 ​​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.11.

Load_clocution (i) ¶

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 của bộ lưu trữ của người dân địa phương nhanh. Tên của biến là
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
96.

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

Load_clocution (i) ¶(i)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 của bộ lưu trữ của người dân địa phương nhanh. Tên của biến là
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
96.

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

Load_clocution (i) ¶(flags)

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

>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
94 của bộ lưu trữ của người dân địa phương nhanh. Tên của biến là
>>> test.func_code.co_code
'|\x00\x00GHd\x00\x00S'
96.

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    45 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í

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    46 Một từ điển của các tham số chỉ từ khóa Giá trị mặc định

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    47 Một bộ chuỗi chứa các tham số Chú thích

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    48 Một tuple chứa các ô cho các biến miễn phí, đóng cửa

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

  • Tên đủ điều kiện của hàm (tại TOS)qualified name of the function (at TOS)

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

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
47 là một bộ chuỗi thay vì từ điểnFlag value
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
47 is a tuple of strings instead of dictionary

Build_slice (argc) ¶(argc)

Đẩ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,

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
50 được đẩy; Nếu là 3,
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
51 được đẩy. Xem chức năng tích hợp
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
52 để biết thêm thông tin.

Extended_arg (ext) ¶(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ố

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
53 được cho phép, tạo thành một đối số từ hai byte đến bốn byte.

Format_value (cờ) ¶(flags)

Đượ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:

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    54: Giá trị được định dạng AS-IS.

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    55: Gọi
    >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    56 về giá trị trước khi định dạng nó.

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    57: Gọi
    >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    58 về giá trị trước khi định dạng nó.

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    59: Gọi
    >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    60 trên giá trị trước khi định dạng nó.

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    61: 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

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
62. Kết quả được đẩy trên ngăn xếp.

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

Match_Class (đếm) ¶(count)

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í.

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

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
0.

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 (

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
3) hoặc thất 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
3).Previously, this instruction also pushed a boolean value indicating success (
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
3) or failure (
>>> 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).

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

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ụ Include/opcode.h3 đánh dấu trong đó xảy ra

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
67:

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    68 Bắt đầu chức năng

  • Include/opcode.h4 sau biểu thức

    >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    70

  • Include/opcode.h6 sau biểu thức

    >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    72

  • >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    73 sau biểu thức
    >>> import dis
    >>> dis.dis(test)
      2           0 LOAD_FAST                0 (a)
                  3 PRINT_ITEM
                  4 PRINT_NEWLINE
                  5 LOAD_CONST               0 (None)
                  8 RETURN_VALUE
    
    74

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

Return_generator¶

Tạo một trình tạo, coroutine hoặc máy phát Async từ khung hiện tại. Xóa khung hiện tại và trả về trình tạo mới được tạo.

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

Return_generator¶

Tạo một trình tạo, coroutine hoặc máy phát Async từ khung hiện tại. Xóa khung hiện tại và trả về trình tạo mới được tạo.

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

Return_generator¶

Tạo một trình tạo, coroutine hoặc máy phát Async từ khung hiện tại. Xóa khung hiện tại và trả về trình tạo mới được tạo.

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

Return_generator¶

Tạo một trình tạo, coroutine hoặc máy phát Async từ khung hiện tại. Xóa khung hiện tại và trả về trình tạo mới được tạo.

GỬI¶Now every instruction has an argument, but opcodes

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
79 ignore it. Before, only opcodes
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
80 had an argument.

Gửi >>> import dis >>> dis.dis(test) 2 0 LOAD_FAST 0 (a) 3 PRINT_ITEM 4 PRINT_NEWLINE 5 LOAD_CONST 0 (None) 8 RETURN_VALUE 0 đến trình tạo phụ của trình tạo này. Được sử dụng trong các câu lệnh >>> import dis >>> dis.dis(test) 2 0 LOAD_FAST 0 (a) 3 PRINT_ITEM 4 PRINT_NEWLINE 5 LOAD_CONST 0 (None) 8 RETURN_VALUE 72 và >>> import dis >>> dis.dis(test) 2 0 LOAD_FAST 0 (a) 3 PRINT_ITEM 4 PRINT_NEWLINE 5 LOAD_CONST 0 (None) 8 RETURN_VALUE 74.

Async_gen_wrap¶

Gói giá trị trên đầu ngăn xếp trong một
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
78. Được sử dụng để mang lại trong các máy phát không đồng bộ.
opname

Have_argument¶

Đây không thực sự là một opcode. Nó xác định đường phân chia giữa các opcode mà don don sử dụng đối số của họ và các opcode lần lượt (
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
79 và
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
80).
opmap

Đã thay đổi trong phiên bản 3.6: Bây giờ mọi hướng dẫn đều có một đối số, nhưng Opcodes

>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
79 bỏ qua nó. Trước đây, chỉ có Opcodes
>>> import dis
>>> dis.dis(test)
  2           0 LOAD_FAST                0 (a)
              3 PRINT_ITEM
              4 PRINT_NEWLINE
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE
80 có một đối số.

Bộ sưu tập Opcodecmp_op

Các bộ sưu tập này được cung cấp để tự động hướng dẫn các hướng dẫn Bytecode:

dis.opname¶hasconst

Trình tự tên hoạt động, có thể lập chỉ mục bằng cách sử dụng mã byte.

dis.opmap¶hasfree

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

dis.cmp_op¶hasname

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

dis.hasconst¶hasjrel

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

dis.hasfree¶hasjabs

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ặc Phạm vi xây dựng).

dis.hasname¶haslocal

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

dis.hasjrel¶hascompare

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

Bạn có thể chạy mã byte python không?

Tiện ích mở rộng PY), Python trước tiên biên dịch nó thành mã byte.Bytecode là một biểu diễn độc lập với nền tảng thấp của mã nguồn của bạn, tuy nhiên, đó không phải là mã máy nhị phân và không thể được chạy trực tiếp bởi máy đích.cannot be run by the target machine directly.

Python có tối ưu hóa mã byte không?

Nó là một loại kỹ thuật tối ưu hóa khác trong Python.Khi mã nguồn Python đi qua bước biên dịch, một số thứ nhất định như biểu thức số, chuỗi & bộ dữ liệu được tối ưu hóa và lưu trữ trong hướng dẫn mã byte.Hãy đi vào chi tiết.certain things such as numeric expressions, strings & tuples get optimized and stored in bytecode instruction. Let's get into details.

Làm thế nào để tôi phân hủy pyc thành py?

Làm thế nào để phân hủy được biên dịch ...
Cài đặt uncompyle6.pip cài đặt uncompyle6 ..
Chạy uncompyle6 từ dấu nhắc lệnh windows.....
Tàn phá.....
8 Phải có tiện ích mở rộng Google Chrome để tiết kiệm giờ làm việc thành vài phút.....
13 Kịch bản Python nâng cao cho lập trình hàng ngày ..

Bạn có thể đảo ngược PYC?

Có, bạn có thể nhận được nó với Unpyclib có thể tìm thấy trên PYPI..