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ụ: "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: 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 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 Ví dụ: Cho chức năng def myfunc(alist): return len(alist) Lệnh sau đây có thể được sử dụng để hiển thị việc tháo gỡ >>> 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_VALUE1 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_VALUE2). Đâ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_VALUE3, 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_VALUE1 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_VALUE5. 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_VALUE6, 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_VALUE6, 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_VALUE8 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_VALUE9, >>> 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_VALUE8 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_VALUE9, >>> 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_VALUE8 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_VALUE1 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_VALUE4, 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_VALUE5. Đã 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íchMô -đun 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 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_VALUE2 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_VALUE7 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_VALUE6. dis 2 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_VALUE9, 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_VALUE9, 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 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 >>> 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_VALUE6. dis 2 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_VALUE9, 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_VALUE7 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 >>> 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_VALUE6. dis 2 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_VALUE9, 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.
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_VALUE7 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 >>> 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_VALUE6. dis 2 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_VALUE9, 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_VALUE9, 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 >>> 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_VALUE6. dis 2 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_VALUE9, 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à Đã 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 Đã 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 PythonHà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_VALUE3 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_VALUE1 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_VALUE5 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_VALUE6 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_VALUE6 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_VALUE6 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_VALUE9 Nếu mã khác nhảy đến đây, nếu không Include/opcode.h 9 vị trí¶
Mới trong phiên bản 3.4. Đã thay đổi trong phiên bản 3.11: Trường 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_VALUE6. Lineno¶ end_lineno¶ col_offset¶ end_col_offset¶¶ end_lineno¶ col_offset¶ end_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 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 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 Thực hiệ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.¶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)
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 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 Thực hiện 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 Unary_negative¶Exception representation on the stack now consist of one, not three, items. Thực hiệnshow_caches=True 5.¶Giải quyết 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 Gọi Gọi Gọi 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 >>> 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_VALUE00 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_VALUE01, 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_VALUE02 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_VALUE03 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_VALUE04 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_VALUE05 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_VALUE06. 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ệ. 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_VALUE07 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_VALUE07 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. 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_VALUE16 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_VALUE08. 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_VALUE08. 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_VALUE38 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_VALUE6. 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_VALUE9) or failure ( Include/opcode.h 9). 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_VALUE42. 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_VALUE43 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_VALUE44 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_VALUE45 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_VALUE46, 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_VALUE43 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_VALUE48, 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_VALUE43. 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_VALUE50, 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_VALUE43. 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_VALUE52, 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_VALUE53, 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_VALUE54 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_VALUE55 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_VALUE56, 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_VALUE56, 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_VALUE58 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_VALUE59. Đã 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_VALUE60 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_VALUE61, 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_VALUE62. Đượ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_VALUE63. Đượ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_VALUE62. Đượ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_VALUE63. Đượ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_VALUE64. Đượ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_VALUE65 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_VALUE65 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_VALUE65 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_VALUE65 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_VALUE65 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_VALUE6, 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_VALUE6, 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_VALUE6, 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_VALUE6, 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_VALUE6, 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à 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_VALUE6, 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à 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_VALUE6, 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_VALUE83 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_VALUE85 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_VALUE86 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) ¶ >>> 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_VALUE83 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_VALUE84 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_VALUE85 đượ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_VALUE86 đượ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_VALUE87 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_VALUE90 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_VALUE96. 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_VALUE87. 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_VALUE90 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_VALUE96. 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_VALUE87. 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_VALUE90 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_VALUE96. 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_VALUE87. 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_VALUE90 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_VALUE96. 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_VALUE87. 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_VALUE90 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_VALUE96. 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_VALUE87. 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_VALUE90. Nếu khe đó trống thì giá trị đó được lưu trữ vào ô mớ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_VALUE90 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_VALUE96.(argc)¶ Load_deref (i) ¶
or:
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_VALUE90 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_VALUE90 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_VALUE07. 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_VALUE55 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_VALUE21) bởi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE25 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_VALUE86 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_VALUE25. 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_VALUE19 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_VALUE25. Mới trong phiên bản 3.11. Đẩy_null¶¶
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_VALUE86 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_VALUE86 được đẩy bởi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE36 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_VALUE86 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_VALUE86 được đẩy bởi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE36 cho các cuộc gọi không phải phương pháp.
>>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE43 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_VALUE44 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_VALUE43 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_VALUE46 đượ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_VALUE47 đượ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_VALUE48 để biết thêm thông tin.
>>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE51: Gọi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE52 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_VALUE53: Gọi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE54 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_VALUE55: Gọi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE56 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_VALUE57: 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 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_VALUE9) or failure ( Include/opcode.h 9).
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)¶
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_VALUE86 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_VALUE86 được đẩy bởi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE36 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_VALUE86 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_VALUE86 được đẩy bởi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE36 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_VALUE86 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_VALUE86 được đẩy bởi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE36 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_VALUE86 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_VALUE86 được đẩy bởi >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE36 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_VALUE75 ignore it. Before, only opcodes >>> bytecode = dis.Bytecode(myfunc) >>> for instr in bytecode: ... print(instr.opname) ... RESUME LOAD_GLOBAL LOAD_FAST PRECALL CALL RETURN_VALUE76 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_VALUE41 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_VALUE42 Một từ điển của các tham số chỉ từ khóa Giá trị mặc địnhopmap¶ 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. |