dis --- واساز برای بایتکد پایتون¶
کد منبع: Lib/dis.py
ماژول dis از تحلیل بایتکد CPython با واسازی کردن آن پشتیبانی میکند. بایتکد CPython که این ماژول آن را بهعنوان ورودی دریافت میکند، در پرونده Include/opcode.h تعریف شده است و توسط کامپایلر و مفسر استفاده میشود.
بایتکد یکی از جزئیات پیادهسازی مفسر CPython است. هیچ تضمینی داده نمیشود که بایتکد بین نسخههای پایتون اضافه، حذف یا تغییر داده نشود. نباید فرض شود که استفاده از این ماژول در میان ماشینهای مجازی پایتون یا نسخههای منتشرشده پایتون کار میکند.
تغییر یافته در نسخهی 3.6: برای هر دستور از ۲ بایت استفاده میشود. پیش از این، تعداد بایتها بسته به دستور متفاوت بود.
تغییر یافته در نسخهی 3.10: آرگومان دستورالعملهای پرش، مدیریت استثنا و حلقه اکنون بهجای آفست بایت، آفست دستورالعمل است.
تغییر یافته در نسخهی 3.11: برخی دستورالعملها همراه با یک یا چند ورودی نهانگاه درونخطی هستند که در قالب دستورالعملهای CACHE ظاهر میشوند. این دستورالعملها بهطور پیشفرض پنهان هستند، اما میتوان آنها را با ارسال show_caches=True به هر ابزار dis نمایش داد. علاوه بر این، مفسر اکنون بایتکد را تطبیق میدهد تا آن را برای شرایط مختلف رانتایم تخصصی کند. بایتکد تطبیقی را میتوان با ارسال adaptive=True نمایش داد.
تغییر یافته در نسخهی 3.12: آرگومان یک پرش، آفست دستور مقصد نسبت به دستوری است که بلافاصله پس از ورودیهای CACHE دستور پرش میآید.
در نتیجه، وجود دستورالعملهای CACHE برای پرشهای رو به جلو شفاف است، اما هنگام استدلال درباره پرشهای رو به عقب باید در نظر گرفته شود.
تغییر یافته در نسخهی 3.13: خروجی برای مقاصد پرش و هندلرهای استثنا، بهجای آفستهای دستورالعمل، برچسبهای منطقی را نشان میدهد. گزینه خط فرمان -O و آرگومان show_offsets افزوده شدند.
مثال: با فرض تابع myfunc():
def myfunc(alist):
return len(alist)
میتوان از فرمان زیر برای نمایش واسازی (disassembly) myfunc() استفاده کرد:
>>> dis.dis(myfunc)
2 RESUME 0
3 LOAD_GLOBAL 1 (len + NULL)
LOAD_FAST_BORROW 0 (alist)
CALL 1
RETURN_VALUE
(«2» شمارهی خط است).
رابط خط فرمان¶
ماژول dis میتواند بهعنوان یک اسکریپت از خط فرمان فراخوانی شود:
python -m dis [-h] [-C] [-O] [-P] [-S] [infile]
گزینههای زیر پذیرفته میشوند:
- -h, --help¶
نمایش کاربرد و خروج.
- -C, --show-caches¶
نمایش نهانگاههای درونخطی.
اضافه شده در نسخهی 3.13.
- -O, --show-offsets¶
نمایش آفستهای دستورالعملها.
اضافه شده در نسخهی 3.13.
- -P, --show-positions¶
نمایش موقعیتهای دستورالعملها در کد منبع.
اضافه شده در نسخهی 3.14.
- -S, --specialized¶
نمایش بایتکد تخصصی.
اضافه شده در نسخهی 3.14.
اگر infile مشخصشده باشد، کد واسازیشدهی آن در stdout نوشته خواهد شد. در غیر این صورت، دیاسمبل بر روی کد منبع کامپایلشده دریافتشده از stdin انجام میشود.
تحلیل بایتکد¶
اضافه شده در نسخهی 3.4.
API تحلیل بایتکد به شما امکان میدهد تکههایی از کد پایتون را در یک شیء Bytecode قرار دهید، که دسترسی آسان به جزئیات کد کامپایلشده را فراهم میکند.
- class dis.Bytecode(x, *, first_line=None, current_offset=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False)¶
بایتکد متناظر با یک تابع، تولیدگر، تولیدگر ناهمگام، همروال، متد، رشتهای از کد منبع، یا شیء کد (همانطور که توسط
compile()برگردانده میشود) را تحلیل کنید.این پوششی آسانکننده برای بسیاری از توابع فهرستشده در زیر است، بهویژه
get_instructions()، زیرا پیمایش روی یک نمونه ازBytecode، عملیاتهای بایتکد را بهصورت نمونههایInstructionبرمیگرداند.اگر first_line برابر
Noneنباشد، شماره سطری را نشان میدهد که باید برای اولین خط منبع در کد واسازیشده گزارش شود. در غیر این صورت، اطلاعات خط منبع (در صورت وجود) مستقیماً از شیء کد واسازیشده گرفته میشود.اگر current_offset برابر
Noneنباشد، به یک آفست دستورالعمل (instruction offset) در کد دیساسمبلشده (disassembled code) اشاره میکند. تنظیم این مقدار به این معناست کهdis()یک نشانگر «دستورالعمل فعلی» را در کنار آپکد (opcode) مشخصشده نمایش خواهد داد.اگر show_caches برابر
Trueباشد،dis()ورودیهای نهانگاه درونخطی مورد استفادهی مفسر برای تخصصیسازی بایتکد را نمایش میدهد.اگر adaptive برابر
Trueباشد،dis()بایتکد تخصصیشدهای را نمایش میدهد که ممکن است با بایتکد اصلی متفاوت باشد.اگر show_offsets برابر
Trueباشد،dis()آفستهای دستورالعمل را در خروجی قرار میدهد.اگر show_positions برابر
Trueباشد،dis()موقعیتهای کد منبع دستورالعملها را در خروجی قرار میدهد.- classmethod from_traceback(tb, *, show_caches=False)¶
با تنظیم current_offset روی دستور مسئول استثنا، یک نمونه
Bytecodeاز ردگیری دادهشده بسازید.
- codeobj¶
شیء کد کامپایلشده.
- first_line¶
اولین خط منبع شیء کد (در صورت موجود بودن)
- dis()¶
نمای قالببندیشدهای از عملیاتهای بایتکد را برمیگرداند (همان چیزی که توسط
dis.dis()چاپ میشود، اما بهصورت یک رشته چندخطی برگردانده میشود).
- info()¶
یک رشته چندخطی قالببندیشده حاوی اطلاعات دقیق درباره شیء کد برمیگرداند، مانند
code_info().
تغییر یافته در نسخهی 3.7: این اکنون میتواند اشیای همروال و تولیدگر ناهمگام را مدیریت کند.
تغییر یافته در نسخهی 3.11: پارامترهای show_caches و adaptive اضافه شدند.
تغییر یافته در نسخهی 3.13: پارامتر show_offsets افزوده شد
تغییر یافته در نسخهی 3.14: پارامتر show_positions افزوده شد.
مثال:
>>> bytecode = dis.Bytecode(myfunc)
>>> for instr in bytecode:
... print(instr.opname)
...
RESUME
LOAD_GLOBAL
LOAD_FAST_BORROW
CALL
RETURN_VALUE
توابع تحلیل¶
ماژول dis همچنین توابع تحلیل زیر را تعریف میکند که ورودی را مستقیماً به خروجی دلخواه تبدیل میکنند. این توابع میتوانند زمانی مفید باشند که فقط یک عملیات واحد در حال انجام است، بنابراین شیء تحلیل میانی مفید نیست:
- dis.code_info(x)¶
یک رشتهی چندخطی قالببندیشده حاوی اطلاعات دقیق شیء کد را برای تابع، تولیدگر، تولیدگر ناهمگام، همروال، متد، رشتهی کد منبع یا شیء کد ارائهشده برمیگرداند.
توجه داشته باشید که محتوای دقیق رشتههای اطلاعات کد بهشدت به پیادهسازی وابسته است و ممکن است در ماشینهای مجازی پایتون یا نسخههای پایتون بهصورت دلخواه تغییر کند.
اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.7: این اکنون میتواند اشیای همروال و تولیدگر ناهمگام را مدیریت کند.
- dis.show_code(x, *, file=None)¶
اطلاعات دقیق شیء کد را برای تابع، متد، رشتهی کد منبع یا شیء کد ارائهشده در file (یا
sys.stdoutاگر file مشخصنشده باشد) چاپ میکند.این میانبر مناسبی برای
print(code_info(x), file=file)است و برای کاوش تعاملی در اعلان مفسر در نظر گرفته شده است.اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.4: پارامتر file افزوده شد.
- dis.dis(x=None, *, file=None, depth=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False)¶
شیء x را واسازی (disassemble) میکند. x میتواند یک ماژول، کلاس، متد، تابع، تولیدگر، تولیدگر ناهمگام، همروال، شیء کد، رشتهای از کد منبع یا دنبالهای بایتی از بایتکد خام (raw bytecode) باشد. برای یک ماژول، تمام توابع را واسازی میکند. برای یک کلاس، تمام متدها (از جمله متدهای کلاسی و ایستا) را واسازی میکند. برای یک شیء کد یا دنبالهای از بایتکد خام، به ازای هر دستور بایتکد یک خط چاپ میکند. همچنین اشیاء کد تودرتو را بهصورت بازگشتی واسازی میکند. این موارد میتوانند شامل عبارات تولیدگر، توابع تودرتو، بدنههای کلاسهای تودرتو و اشیاء کدی باشند که برای محدودههای annotation استفاده میشوند. رشتهها پیش از واسازی شدن، ابتدا با تابع توکار
compile()به اشیاء کد کامپایل میشوند. اگر شیءای ارائه نشود، این تابع آخرین ردگیری را واسازی میکند.واسازی بهصورت متن، در صورت ارائه شدن آرگومان file، در آن نوشته میشود و در غیر این صورت در
sys.stdout.حداکثر عمق بازگشت توسط depth محدود میشود، مگر اینکه
Noneباشد.depth=0به معنای نبود بازگشت است.اگر show_caches برابر
Trueباشد، این تابع ورودیهای نهانگاه درونخطی را که مفسر برای تخصصیسازی بایتکد از آنها استفاده میکند، نمایش میدهد.اگر adaptive برابر
Trueباشد، این تابع بایتکد تخصصیشده را نمایش میدهد که ممکن است با بایتکد اصلی متفاوت باشد.تغییر یافته در نسخهی 3.4: پارامتر file افزوده شد.
تغییر یافته در نسخهی 3.7: از هم باز کردن بازگشتی (disassembling) پیادهسازی شد و پارامتر depth افزوده شد.
تغییر یافته در نسخهی 3.7: این اکنون میتواند اشیای همروال و تولیدگر ناهمگام را مدیریت کند.
تغییر یافته در نسخهی 3.11: پارامترهای show_caches و adaptive اضافه شدند.
تغییر یافته در نسخهی 3.13: پارامتر show_offsets افزوده شد.
تغییر یافته در نسخهی 3.14: پارامتر show_positions افزوده شد.
- dis.distb(tb=None, *, file=None, show_caches=False, adaptive=False, show_offset=False, show_positions=False)¶
تابع بالای پشته در یک ردگیری پشته را واسازی (disassemble) میکند؛ اگر ردگیری پشتهای ارسال نشده باشد، از آخرین ردگیری پشته استفاده میشود. دستوری که باعث ایجاد استثنا شده است، مشخص میشود.
واسازی بهصورت متن، در صورت ارائه شدن آرگومان file، در آن نوشته میشود و در غیر این صورت در
sys.stdout.تغییر یافته در نسخهی 3.4: پارامتر file افزوده شد.
تغییر یافته در نسخهی 3.11: پارامترهای show_caches و adaptive اضافه شدند.
تغییر یافته در نسخهی 3.13: پارامتر show_offsets افزوده شد.
تغییر یافته در نسخهی 3.14: پارامتر show_positions افزوده شد.
- dis.disassemble(code, lasti=-1, *, file=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False)¶
- dis.disco(code, lasti=-1, *, file=None, show_caches=False, adaptive=False, show_offsets=False, show_positions=False)¶
یک شیء کد را واسازی (disassemble) میکند و در صورت ارائه lasti، آخرین دستورالعمل را مشخص میکند. خروجی به ستونهای زیر تقسیم میشود:
موقعیت کد منبع دستورالعمل. اگر show_positions برابر true باشد، اطلاعات کامل موقعیت نمایش داده میشود. در غیر این صورت (حالت پیشفرض) فقط شماره خط نمایش داده میشود.
دستور جاری، که با
-->نشان داده شده است،یک دستور برچسبدار، مشخصشده با
>>،نشانی دستور،
نام کد عملیات،
پارامترهای عملیات، و
تفسیر پارامترهای داخل پرانتز.
تفسیر پارامتر، نام متغیرهای محلی و سراسری، مقادیر ثابت، مقاصد شاخه و عملگرهای مقایسه را تشخیص میدهد.
واسازی بهصورت متن، در صورت ارائه شدن آرگومان file، در آن نوشته میشود و در غیر این صورت در
sys.stdout.تغییر یافته در نسخهی 3.4: پارامتر file افزوده شد.
تغییر یافته در نسخهی 3.11: پارامترهای show_caches و adaptive اضافه شدند.
تغییر یافته در نسخهی 3.13: پارامتر show_offsets افزوده شد.
تغییر یافته در نسخهی 3.14: پارامتر show_positions افزوده شد.
- dis.get_instructions(x, *, first_line=None, show_caches=False, adaptive=False)¶
یک پیمایشگر بر روی دستورالعملهای موجود در تابع، متد، رشتهی کد منبع یا شیء کد ارائهشده برمیگرداند.
این پیمایشگر دنبالهای از تاپلهای نامدار (named tuple) از نوع
Instructionتولید میکند که جزئیات هر عملیات در کد ارائهشده را نشان میدهد.اگر first_line برابر
Noneنباشد، شماره سطری را نشان میدهد که باید برای اولین خط منبع در کد واسازیشده گزارش شود. در غیر این صورت، اطلاعات خط منبع (در صورت وجود) مستقیماً از شیء کد واسازیشده گرفته میشود.پارامتر adaptive همان رفتاری را دارد که در
dis()دارد.اضافه شده در نسخهی 3.4.
تغییر یافته در نسخهی 3.11: پارامترهای show_caches و adaptive اضافه شدند.
تغییر یافته در نسخهی 3.13: پارامتر show_caches منسوخ است و هیچ اثری ندارد. پیمایشگر نمونههای
Instructionرا با فیلد cache_info مقداردهیشده تولید میکند (صرفنظر از مقدار show_caches) و دیگر آیتمهای جداگانه برای ورودیهای نهانگاه تولید نمیکند.
- dis.findlinestarts(code)¶
این تابع تولیدگر از متد
co_lines()مربوط به شیء کد code برای یافتن آفستهایی که آغاز سطرهای در کد منبع هستند استفاده میکند. آنها بهصورت جفتهای(offset, lineno)تولید میشوند.تغییر یافته در نسخهی 3.6: شمارههای خط میتوانند کاهشی باشند. پیش از این، همیشه افزایشی بودند.
تغییر یافته در نسخهی 3.10: متد
co_lines()مربوط به PEP 626، بهجای ویژگیهایco_firstlinenoوco_lnotabدر شیء کد استفاده میشود.تغییر یافته در نسخهی 3.13: شمارههای خط میتوانند برای بایتکدی که به سطرهای منبع نگاشت نمیشود،
Noneباشند.
- dis.findlabels(code)¶
تمام آفستهای موجود در رشتهی بایتکد خام کامپایلشدهی code را که مقصدهای پرش هستند، شناسایی میکند و فهرستی از این آفستها را برمیگرداند.
- dis.stack_effect(opcode, oparg=None, *, jump=None)¶
اثر پشتهی opcode را با آرگومان oparg محاسبه میکند.
اگر کد دارای هدف پرش باشد و jump برابر
Trueباشد،stack_effect()اثر پشتهی پرش را برمیگرداند. اگر jump برابرFalseباشد، اثر پشتهی عدم پرش را برمیگرداند. و اگر jump برابرNoneباشد (پیشفرض)، بیشینهی اثر پشته در هر دو حالت را برمیگرداند.اضافه شده در نسخهی 3.4.
تغییر یافته در نسخهی 3.8: پارامتر jump افزوده شد.
تغییر یافته در نسخهی 3.13: اگر
opargحذف شود (یاNoneباشد)، اثر پشته اکنون برایoparg=0بازگردانده میشود. پیشتر این حالت برای آپکدها (opcode) که از آرگومان خود استفاده میکنند، خطا بود. همچنین دیگر ارسال یکopargعدد صحیح وقتی کهopcodeاز آن استفاده نمیکند، خطا نیست؛ در این حالتopargنادیده گرفته میشود.
دستورالعملهای بایتکد پایتون¶
تابع get_instructions() و کلاس Bytecode جزئیات دستورالعملهای بایتکد را بهصورت نمونههای Instruction ارائه میکنند:
- class dis.Instruction¶
جزئیات یک عملیات بایتکد
- opcode¶
کد عددی برای عملیات، متناظر با مقادیر آپکد (opcode) فهرستشده در زیر و مقادیر بایتکد در مجموعههای آپکد (opcode).
- opname¶
نام قابلخواندن برای انسان برای عملیات
- baseopname¶
نام قابلخواندن برای انسان برای عملیات پایه، اگر عملیات تخصصیشده باشد؛ در غیر این صورت برابر با
opname
- arg¶
آرگومان عددی عملیات (در صورت وجود)، در غیر این صورت
None
- argval¶
مقدار آرگومان تعیینشده (در صورت وجود)، در غیر این صورت
None
- argrepr¶
توضیح قابلخواندن برای انسان دربارهی آرگومان عملیات (در صورت وجود)، در غیر این صورت یک رشته خالی.
- offset¶
اندیس شروع عملیات در دنبالهی بایتکد
- start_offset¶
اندیس شروع عملیات در دنبالهی بایتکد، شامل عملیاتهای پیشوندی
EXTENDED_ARGدر صورت وجود؛ در غیر این صورت برابر باoffset
- cache_offset¶
اندیس شروع آیتمهای نهانگاه پس از عملیات
- end_offset¶
اندیس پایانی آیتمهای نهانگاه پس از عملیات
- starts_line¶
Trueاگر این آپکد (opcode) یک خط منبع را آغاز کند، در غیر این صورتFalse
- line_number¶
شمارهی خط منبع مرتبط با این آپکد (opcode) (در صورت وجود)، در غیر این صورت
None
- is_jump_target¶
اگر کد دیگری به اینجا بپرد،
Trueو در غیر این صورتFalse
- jump_target¶
اندیس بایتکد هدف پرش، اگر این یک عملیات پرش باشد، در غیر این صورت
None
- positions¶
شیء
dis.Positionsکه موقعیتهای شروع و پایان تحت پوشش این دستور را نگه میدارد.
- cache_info¶
اطلاعات مربوط به ورودیهای نهانگاه این دستور، بهصورت سهتاییهایی با قالب
(name, size, data)، که در آنnameوsizeقالب نهانگاه را توصیف میکنند و data محتوای نهانگاه است. اگر این دستور نهانگاه نداشته باشد،cache_infoبرابرNoneخواهد بود.
اضافه شده در نسخهی 3.4.
تغییر یافته در نسخهی 3.11: فیلد
positionsاضافه شده است.تغییر یافته در نسخهی 3.13: فیلد
starts_lineتغییر کرد.فیلدهای
start_offset،cache_offset،end_offset،baseopname،baseopcode،jump_target،oparg،line_numberوcache_infoافزوده شدند.
- class dis.Positions¶
در صورتی که اطلاعات در دسترس نباشد، ممکن است برخی فیلدها
Noneباشند.- lineno¶
- end_lineno¶
- col_offset¶
- end_col_offset¶
اضافه شده در نسخهی 3.11.
کامپایلر پایتون در حال حاضر دستورالعملهای بایتکد زیر را تولید میکند.
دستورالعملهای عمومی
در ادامه، از پشتهی مفسر با نام STACK یاد میکنیم و عملیات روی آن را بهگونهای توصیف میکنیم که گویی یک فهرست پایتون است. در این زبان، بالای پشته با STACK[-1] متناظر است.
- NOP¶
کد بدون عمل. توسط بهینهساز بایتکد بهعنوان جاینگهدار و برای تولید رویدادهای ردگیری خط استفاده میشود.
- NOT_TAKEN¶
کد بدون عمل. توسط مفسر برای ثبت رویدادهای
BRANCH_LEFTوBRANCH_RIGHTبرایsys.monitoringاستفاده میشود.اضافه شده در نسخهی 3.14.
- POP_ITER¶
پیمایشگر را از بالای پشته حذف میکند.
اضافه شده در نسخهی 3.14.
- POP_TOP¶
آیتم بالای پشته را حذف میکند:
STACK.pop()
- END_FOR¶
آیتم بالای پشته را حذف میکند. معادل
POP_TOPاست. برای پاکسازی در پایان حلقهها استفاده میشود، به همین دلیل این نام را دارد.اضافه شده در نسخهی 3.12.
- END_SEND¶
del STACK[-2]را پیادهسازی میکند. برای پاکسازی هنگام خروج یک تولیدگر استفاده میشود.اضافه شده در نسخهی 3.12.
- COPY(i)¶
آیتم iاُم را بدون حذف آن از محل اصلیاش، در بالای پشته قرار میدهد:
assert i > 0 STACK.append(STACK[-i])
اضافه شده در نسخهی 3.11.
- SWAP(i)¶
جابهجایی بالای پشته با عنصر iام:
STACK[-i], STACK[-1] = STACK[-1], STACK[-i]
اضافه شده در نسخهی 3.11.
- CACHE¶
این آپکد (opcode) بهجای آنکه یک دستور واقعی باشد، برای علامتگذاری فضای اضافی استفاده میشود تا مفسر بتواند دادههای مفید را مستقیماً در خود بایتکد نهانگاهسازی کند. این آپکد بهطور خودکار توسط همه ابزارهای
disپنهان میشود، اما میتوان آن را باshow_caches=Trueمشاهده کرد.از نظر منطقی، این فضا بخشی از دستور پیشین است. بسیاری از آپکدها (opcode) انتظار دارند تعداد دقیقی نهانگاه به دنبال آنها بیاید و به مفسر دستور میدهند تا در رانتایم از روی آنها بپرد.
نهانگاههای پرشده میتوانند شبیه دستورالعملهای دلخواه به نظر برسند، بنابراین هنگام خواندن یا تغییر بایتکد خام و تطبیقی حاوی دادههای سریعشده (quickened) باید دقت زیادی به عمل آید.
اضافه شده در نسخهی 3.11.
عملیاتهای یکعملوندی
عملیاتهای یکعملوندی، عنصر بالایی پشته را برمیدارند، عملیات را اعمال میکنند و نتیجه را دوباره روی پشته قرار میدهند.
- UNARY_NEGATIVE¶
STACK[-1] = -STACK[-1]را پیادهسازی میکند.
- UNARY_NOT¶
STACK[-1] = not STACK[-1]را پیادهسازی میکند.تغییر یافته در نسخهی 3.13: این دستور اکنون به عملوندی دقیقاً از نوع
boolنیاز دارد.
- UNARY_INVERT¶
STACK[-1] = ~STACK[-1]را پیادهسازی میکند.
- GET_ITER¶
STACK[-1] = iter(STACK[-1])را پیادهسازی میکند.
- GET_YIELD_FROM_ITER¶
اگر
STACK[-1]یک شیء generator iterator یا همروال باشد، به همان صورت باقی میماند. در غیر این صورت،STACK[-1] = iter(STACK[-1])را پیادهسازی میکند.اضافه شده در نسخهی 3.5.
- TO_BOOL¶
STACK[-1] = bool(STACK[-1])را پیادهسازی میکند.اضافه شده در نسخهی 3.13.
عملیات دودویی و درجایی
عملیاتهای دودویی دو آیتم بالایی را از پشته (STACK[-1] و STACK[-2]) برمیدارند. آنها عملیات را انجام میدهند، سپس نتیجه را دوباره روی پشته قرار میدهند.
عملیاتهای درجا مانند عملیاتهای دودویی هستند، اما زمانی که STACK[-2] از آن پشتیبانی کند، عملیات بهصورت درجا انجام میشود، و STACK[-1] حاصل ممکن است (اما لازم نیست) همان STACK[-2] اصلی باشد.
- BINARY_OP(op)¶
عملگرهای دودویی و درجا را (بسته به مقدار op) پیادهسازی میکند:
rhs = STACK.pop() lhs = STACK.pop() STACK.append(lhs op rhs)
اضافه شده در نسخهی 3.11.
تغییر یافته در نسخهی 3.14: با oparg :
NB_SUBSCR، زیرنویس دودویی (binary subscript) را پیادهسازی میکند (جایگزین opcodeBINARY_SUBSCRمیشود)
- STORE_SUBSCR¶
پیادهسازی:
key = STACK.pop() container = STACK.pop() value = STACK.pop() container[key] = value
- DELETE_SUBSCR¶
پیادهسازی:
key = STACK.pop() container = STACK.pop() del container[key]
- BINARY_SLICE¶
پیادهسازی:
end = STACK.pop() start = STACK.pop() container = STACK.pop() STACK.append(container[start:end])
اضافه شده در نسخهی 3.12.
- STORE_SLICE¶
پیادهسازی:
end = STACK.pop() start = STACK.pop() container = STACK.pop() value = STACK.pop() container[start:end] = value
اضافه شده در نسخهی 3.12.
آپکدهای همروال
- GET_AWAITABLE(where)¶
STACK[-1] = get_awaitable(STACK[-1])را پیادهسازی میکند، که در آنget_awaitable(o)اگرoیک شیء همروال یا یک شیء تولیدگر با پرچمCO_ITERABLE_COROUTINEباشد،oرا برمیگرداند، یاo.__await__را حل میکند.اگر عملوند
whereغیرصفر باشد، محل وقوع دستورالعمل را نشان میدهد:1: پس از فراخوانی__aenter__2: پس از فراخوانی__aexit__
اضافه شده در نسخهی 3.5.
تغییر یافته در نسخهی 3.11: پیشتر، این دستور oparg نداشت.
- GET_AITER¶
STACK[-1] = STACK[-1].__aiter__()را پیادهسازی میکند.اضافه شده در نسخهی 3.5.
تغییر یافته در نسخهی 3.7: برگرداندن اشیای awaitable از
__aiter__دیگر پشتیبانی نمیشود.
- GET_ANEXT¶
STACK.append(get_awaitable(STACK[-1].__anext__()))را روی پشته پیادهسازی کنید. برای جزئیات دربارهیget_awaitable،GET_AWAITABLEرا ببینید.اضافه شده در نسخهی 3.5.
- END_ASYNC_FOR¶
حلقهی
async forرا پایان میدهد. استثنای پرتابشده هنگام await برای آیتم بعدی را مدیریت میکند. پشته حاوی پیمایشپذیر ناهمگام درSTACK[-2]و استثنای پرتابشده درSTACK[-1]است. هر دو از پشته برداشته میشوند. اگر استثناStopAsyncIterationنباشد، دوباره پرتاب میشود.اضافه شده در نسخهی 3.8.
تغییر یافته در نسخهی 3.11: نمایش استثنا روی پشته اکنون شامل ۱ آیتم است، نه ۳ آیتم.
- CLEANUP_THROW¶
استثنای پرتابشده در حین فراخوانی
throw()یاclose()از طریق فریم جاری را مدیریت میکند. اگرSTACK[-1]نمونهای ازStopIterationباشد، سه مقدار را از پشته برمیدارد و ویژگیvalueآن را بر پشته میگذارد. در غیر این صورت،STACK[-1]را دوباره پرتاب میکند.اضافه شده در نسخهی 3.12.
آپکدهای متفرقه
- SET_ADD(i)¶
پیادهسازی:
item = STACK.pop() set.add(STACK[-i], item)
برای پیادهسازی درکهای مجموعهای استفاده میشود.
- LIST_APPEND(i)¶
پیادهسازی:
item = STACK.pop() list.append(STACK[-i], item)
برای پیادهسازی درکهای فهرستی استفاده میشود.
- MAP_ADD(i)¶
پیادهسازی:
value = STACK.pop() key = STACK.pop() dict.__setitem__(STACK[-i], key, value)
برای پیادهسازی درک دیکشنری استفاده میشود.
اضافه شده در نسخهی 3.1.
تغییر یافته در نسخهی 3.8: مقدار نگاشت
STACK[-1]و کلید نگاشتSTACK[-2]است. پیش از این، این دو معکوس بودند.
برای تمام دستورالعملهای SET_ADD، LIST_APPEND و MAP_ADD، در حالی که مقدار یا جفت کلید/مقدار افزودهشده از پشته برداشته میشود، شیء نگهدارنده روی پشته باقی میماند تا برای تکرارهای بعدی حلقه در دسترس باشد.
- RETURN_VALUE¶
با
STACK[-1]به فراخوانندهی تابع بازمیگردد.
- YIELD_VALUE¶
STACK.pop()را از یک تولیدگر yield میکند.تغییر یافته در نسخهی 3.11: oparg برابر با عمق پشته تنظیم میشود.
تغییر یافته در نسخهی 3.12: oparg بهعنوان عمق بلوک استثنا تنظیم میشود، برای بستن کارآمد تولیدگرها.
تغییر یافته در نسخهی 3.13: oparg در صورتی
1است که این دستور بخشی از yield-from یا await باشد، و در غیر این صورت0است.
- SETUP_ANNOTATIONS¶
بررسی میکند که آیا
__annotations__درlocals()تعریفشده است یا خیر؛ در غیر این صورت، به یکdictخالی تنظیم میشود. این آپکد (opcode) تنها در صورتی صادر میشود که بدنهی یک کلاس یا ماژول بهصورت ایستا حاوی variable annotations باشد.اضافه شده در نسخهی 3.6.
- POP_EXCEPT¶
یک مقدار را از پشته برمیدارد که برای بازیابی وضعیت استثنا به کار میرود.
تغییر یافته در نسخهی 3.11: نمایش استثنا روی پشته اکنون شامل ۱ آیتم است، نه ۳ آیتم.
- RERAISE¶
استثنایی را که در حال حاضر در بالای پشته قرار دارد، مجدداً پرتاب میکند. اگر oparg غیرصفر باشد، یک مقدار اضافی را از پشته برمیدارد که برای تنظیم
f_lastiفریم جاری استفاده میشود.اضافه شده در نسخهی 3.9.
تغییر یافته در نسخهی 3.11: نمایش استثنا روی پشته اکنون شامل ۱ آیتم است، نه ۳ آیتم.
- PUSH_EXC_INFO¶
یک مقدار را از پشته برمیدارد. استثنای فعلی را به بالای پشته میگذارد. مقداری را که در اصل برداشته شده بود دوباره به پشته بازمیگرداند. در هندلرهای استثنا استفاده میشود.
اضافه شده در نسخهی 3.11.
- CHECK_EXC_MATCH¶
عملیات تطبیق استثنا برای
exceptرا انجام میدهد. بررسی میکند که آیاSTACK[-2]استثنایی است که باSTACK[-1]مطابقت دارد یا خیر.STACK[-1]را از پشته برمیدارد و نتیجه بولی این بررسی را روی پشته قرار میدهد.اضافه شده در نسخهی 3.11.
- CHECK_EG_MATCH¶
تطبیق استثنا را برای
except*انجام میدهد.split(STACK[-1])را روی گروه استثنا که نشاندهندهیSTACK[-2]است اعمال میکند.در صورت تطابق، دو آیتم را از پشته برمیدارد و زیرگروه غیرمنطبق (در صورت تطابق کامل
None) و سپس زیرگروه منطبق را بر پشته میگذارد. هنگامی که تطابقی وجود ندارد، یک آیتم (نوع تطابق) را برمیدارد وNoneرا بر پشته میگذارد.اضافه شده در نسخهی 3.11.
- WITH_EXCEPT_START¶
تابع موجود در جایگاه ۴ روی پشته را با آرگومانهای (type, val, tb) که استثنا در بالای پشته را نشان میدهند، فراخوانی میکند. برای پیادهسازی فراخوانی
context_manager.__exit__(*exc_info())هنگامی که استثنایی در یک دستورwithرخ داده باشد، استفاده میشود.اضافه شده در نسخهی 3.9.
تغییر یافته در نسخهی 3.11: تابع
__exit__به جای موقعیت ۷، در موقعیت ۴ پشته قرار دارد. بازنمایی استثنا در پشته اکنون شامل یک آیتم است، نه سه آیتم.
- LOAD_COMMON_CONSTANT¶
یک ثابت رایج را روی پشته قرار میدهد. مفسر حاوی یک فهرست سختکدشده از ثابتهای پشتیبانیشده توسط این دستورالعمل است. در دستور
assertبرای بارگذاریAssertionErrorاستفاده میشود.اضافه شده در نسخهی 3.14.
- LOAD_BUILD_CLASS¶
builtins.__build_class__()را روی پشته میگذارد. سپس برای ساخت یک کلاس فراخوانی میشود.
- GET_LEN¶
STACK.append(len(STACK[-1]))را اجرا میکند. در دستورهایmatchکه در آنها مقایسه با ساختار الگو لازم است، استفاده میشود.اضافه شده در نسخهی 3.10.
- MATCH_MAPPING¶
اگر
STACK[-1]نمونهای ازcollections.abc.Mappingباشد (یا، از نظر فنی دقیقتر: اگر پرچمPy_TPFLAGS_MAPPINGدرtp_flagsآن تنظیم شده باشد)،Trueرا روی پشته قرار دهید. در غیر این صورت،Falseرا روی پشته قرار دهید.اضافه شده در نسخهی 3.10.
- MATCH_SEQUENCE¶
اگر
STACK[-1]نمونهای ازcollections.abc.Sequenceباشد و نمونهای ازstr/bytes/bytearrayنباشد (یا به بیان فنیتر: اگر پرچمPy_TPFLAGS_SEQUENCEدرtp_flagsآن تنظیمشده باشد)،Trueرا روی پشته قرار دهید. در غیر این صورت،Falseرا روی پشته قرار دهید.اضافه شده در نسخهی 3.10.
- MATCH_KEYS¶
STACK[-1]یک تاپل از کلیدهای نگاشت است، وSTACK[-2]موضوع تطبیق است. اگرSTACK[-2]شامل همهی کلیدهایSTACK[-1]باشد، یکtupleحاوی مقادیر متناظر را روی پشته قرار دهید. در غیر این صورت،Noneرا روی پشته قرار دهید.اضافه شده در نسخهی 3.10.
تغییر یافته در نسخهی 3.11: پیشتر، این دستورالعمل همچنین یک مقدار بولی را که نشاندهندهی موفقیت (
True) یا شکست (False) بود، روی پشته میگذاشت.
- STORE_NAME(namei)¶
name = STACK.pop()را پیادهسازی میکند. namei اندیس name در ویژگیco_namesاز شیء کد است. کامپایلر در صورت امکان تلاش میکند ازSTORE_FASTیاSTORE_GLOBALاستفاده کند.
- DELETE_NAME(namei)¶
del nameرا پیادهسازی میکند، که در آن namei اندیسی در ویژگیco_namesاز شیء کد است.
- UNPACK_SEQUENCE(count)¶
STACK[-1]را به count مقدار جداگانه واگشایی میکند، که این مقادیر بهصورت راستبهچپ روی پشته قرار میگیرند. نیاز دارد که دقیقاً count مقدار وجود داشته باشد.:assert(len(STACK[-1]) == count) STACK.extend(STACK.pop()[:-count-1:-1])
- UNPACK_EX(counts)¶
انتساب با یک هدف ستارهدار را پیادهسازی میکند: یک پیمایشپذیر موجود در
STACK[-1]را به مقادیر جداگانه واگشایی میکند، که تعداد کل مقادیر میتواند کمتر از تعداد آیتمهای موجود در پیمایشپذیر باشد: یکی از مقادیر جدید، فهرستی از تمام آیتمهای باقیمانده خواهد بود.تعداد مقادیر پیش و پس از مقدار فهرست به ۲۵۵ محدود شده است.
تعداد مقادیر پیش از مقدار فهرست در آرگومان آپکد (opcode) کدگذاری میشود. تعداد مقادیر پس از فهرست، در صورت وجود، با استفاده از
EXTENDED_ARGکدگذاری میشود. در نتیجه، میتوان آرگومان را بهعنوان یک مقدار دو بایتی در نظر گرفت که در آن بایت پایینی counts تعداد مقادیر پیش از مقدار فهرست و بایت بالایی counts تعداد مقادیر پس از آن است.مقادیر استخراجشده از راست به چپ روی پشته قرار میگیرند، یعنی
a, *b, c = dپس از اجرا بهصورتSTACK.extend((a, b, c))ذخیره میشود.
- STORE_ATTR(namei)¶
پیادهسازی:
obj = STACK.pop() value = STACK.pop() obj.name = value
- DELETE_ATTR(namei)¶
پیادهسازی:
obj = STACK.pop() del obj.name
- STORE_GLOBAL(namei)¶
مانند
STORE_NAMEعمل میکند، اما نام را بهصورت سراسری ذخیره میکند.
- DELETE_GLOBAL(namei)¶
مانند
DELETE_NAMEعمل میکند، اما یک نام سراسری را حذف میکند.
- LOAD_CONST(consti)¶
co_consts[consti]را روی پشته میگذارد.
- LOAD_SMALL_INT(i)¶
عدد صحیح
iرا روی پشته قرار میدهد.iباید درrange(256)باشداضافه شده در نسخهی 3.14.
- LOAD_NAME(namei)¶
مقدار مرتبط با
co_names[namei]را روی پشته میگذارد. این نام ابتدا در فضای نام محلی، سپس در فضای نام سراسری و سپس در توکارها جستجو میشود.
- LOAD_LOCALS¶
یک ارجاع به دیکشنری متغیرهای محلی را روی پشته قرار میدهد. این برای آمادهسازی دیکشنریهای فضای نام برای
LOAD_FROM_DICT_OR_DEREFوLOAD_FROM_DICT_OR_GLOBALSاستفاده میشود.اضافه شده در نسخهی 3.12.
- LOAD_FROM_DICT_OR_GLOBALS(i)¶
یک نگاشت را از پشته برمیدارد و مقدار متناظر با
co_names[namei]را جستوجو میکند. اگر نام در آن یافت نشود، آن را در نامهای سراسری و سپس در نامهای توکار جستوجو میکند، مشابهLOAD_GLOBAL. این برای بارگذاری متغیرهای سراسری در محدودههای annotation در بدنههای کلاس استفاده میشود.اضافه شده در نسخهی 3.12.
- BUILD_TEMPLATE¶
یک نمونهی
Templateجدید را از یک تاپل از رشتهها و یک تاپل از درونیابیها میسازد و شیء حاصل را روی پشته قرار میدهد:interpolations = STACK.pop() strings = STACK.pop() STACK.append(_build_template(strings, interpolations))
اضافه شده در نسخهی 3.14.
- BUILD_INTERPOLATION(format)¶
نمونهی جدیدی از
Interpolationرا از یک مقدار و عبارت منبع آن میسازد و شیء حاصل را روی پشته قرار میدهد.اگر تبدیل یا مشخصهی قالبی وجود نداشته باشد،
formatروی2تنظیم میشود.اگر بیت کمارزش
formatتنظیم شده باشد، نشان میدهد که درونیابی (interpolation) حاوی مشخصات قالب است.اگر
format >> 2غیرصفر باشد، نشان میدهد که درونیابی شامل یک تبدیل است. مقدارformat >> 2نوع تبدیل است (0برای بدون تبدیل،1برای!s،2برای!rو3برای!a):conversion = format >> 2 if format & 1: format_spec = STACK.pop() else: format_spec = None expression = STACK.pop() value = STACK.pop() STACK.append(_build_interpolation(value, expression, conversion, format_spec))
اضافه شده در نسخهی 3.14.
- BUILD_TUPLE(count)¶
با مصرف count آیتم از پشته، یک تاپل ایجاد میکند و تاپل حاصل را روی پشته قرار میدهد:
if count == 0: value = () else: value = tuple(STACK[-count:]) STACK = STACK[:-count] STACK.append(value)
- BUILD_LIST(count)¶
مانند
BUILD_TUPLEعمل میکند، اما یک فهرست ایجاد میکند.
- BUILD_SET(count)¶
مانند
BUILD_TUPLEعمل میکند، اما یک مجموعه میسازد.
- BUILD_MAP(count)¶
یک شیء دیکشنری جدید را روی پشته قرار میدهد.
2 * countآیتم را برمیدارد تا دیکشنری دارای count آیتم باشد:{..., STACK[-4]: STACK[-3], STACK[-2]: STACK[-1]}.تغییر یافته در نسخهی 3.5: دیکشنری بهجای ایجاد یک دیکشنری خالی با اندازهی از پیش تعیینشده برای نگهداری count آیتم، از آیتمهای پشته ایجاد میشود.
- BUILD_STRING(count)¶
count رشته را از پشته به هم الحاق میکند و رشتهی حاصل را روی پشته میگذارد.
اضافه شده در نسخهی 3.6.
- LIST_EXTEND(i)¶
پیادهسازی:
seq = STACK.pop() list.extend(STACK[-i], seq)
برای ساخت فهرستها استفاده میشود.
اضافه شده در نسخهی 3.9.
- SET_UPDATE(i)¶
پیادهسازی:
seq = STACK.pop() set.update(STACK[-i], seq)
برای ساخت مجموعهها استفاده میشود.
اضافه شده در نسخهی 3.9.
- DICT_UPDATE(i)¶
پیادهسازی:
map = STACK.pop() dict.update(STACK[-i], map)
برای ساخت دیکشنریها استفاده میشود.
اضافه شده در نسخهی 3.9.
- DICT_MERGE(i)¶
مانند
DICT_UPDATEاست، اما برای کلیدهای تکراری یک استثنا پرتاب میکند.اضافه شده در نسخهی 3.9.
- LOAD_ATTR(namei)¶
اگر بیت کمارزش
nameiتنظیم نشده باشد، این عملSTACK[-1]را باgetattr(STACK[-1], co_names[namei>>1])جایگزین میکند.اگر بیت کمارزش
nameiتنظیم شده باشد، این بایتکد تلاش میکند متدی به نامco_names[namei>>1]را از شیءSTACK[-1]بارگذاری کند.STACK[-1]از پشته خارج میشود. این بایتکد دو حالت را تفکیک میکند: اگرSTACK[-1]متدی با نام صحیح داشته باشد، بایتکد متد غیرمقید وSTACK[-1]را روی پشته قرار میدهد.STACK[-1]بهعنوان نخستین آرگومان (self) توسطCALLیاCALL_KWهنگام فراخوانی متد غیرمقید استفاده خواهد شد. در غیر این صورت،NULLو شیء برگرداندهشده از جستجوی ویژگی روی پشته قرار میگیرند.تغییر یافته در نسخهی 3.12: اگر بیت کمارزش
nameiتنظیمشده باشد، آنگاهNULLیاselfبهترتیب پیش از ویژگی یا متد غیرمقید به پشته فرستاده میشود.
- LOAD_SUPER_ATTR(namei)¶
این آپکد (opcode)،
super()را در هر دو شکل بدون آرگومان و دو آرگومانی پیادهسازی میکند (برای مثالsuper().method()،super().attrوsuper(cls, self).method()،super(cls, self).attr).سه مقدار را از پشته برمیدارد (از بالای پشته به پایین):
self: نخستین آرگومان متد جاریcls: کلاسی که متد جاری در آن تعریف شده استsuperسراسری
از نظر آرگومان خود، مانند
LOAD_ATTRعمل میکند، با این تفاوت کهnameiبه جای ۱ بیت، ۲ بیت به چپ شیفت داده میشود.بیت پایینی
nameiنشان میدهد که باید برای بارگذاری یک متد تلاش شود، مانندLOAD_ATTR، که باعث میشودNULLو متد بارگذاریشده به پشته فشار داده شوند. وقتی این بیت تنظیمنشده باشد، یک مقدار واحد به پشته فشار داده میشود.دومین بیت کمارزشِ
namei، اگر تنظیمشده باشد، به این معناست که این یک فراخوانی با دو آرگومان بهsuper()بوده است (تنظیمنشده به معنای صفر آرگومان است).اضافه شده در نسخهی 3.12.
- COMPARE_OP(opname)¶
یک عملیات بولی انجام میدهد. نام عملیات را میتوان در
cmp_op[opname >> 5]یافت. اگر پنجمین بیت از پایینِopnameبرابر ۱ باشد (opname & 16)، نتیجه باید بهboolتبدیل شود.تغییر یافته در نسخهی 3.13: پنجمین بیت کمارزشِ oparg اکنون نشاندهندهی تبدیل اجباری به
boolاست.
- IS_OP(invert)¶
مقایسهی
isرا انجام میدهد، یا اگرinvertبرابر ۱ باشد، مقایسهیis notرا انجام میدهد.اضافه شده در نسخهی 3.9.
- CONTAINS_OP(invert)¶
مقایسهی
inرا انجام میدهد، یا اگرinvertبرابر با ۱ باشد، مقایسهیnot inرا انجام میدهد.اضافه شده در نسخهی 3.9.
- IMPORT_NAME(namei)¶
ماژول
co_names[namei]را ایمپورت میکند.STACK[-1]وSTACK[-2]از پشته برداشته میشوند و آرگومانهای fromlist و level برای__import__()را فراهم میکنند. شیء ماژول روی پشته قرار میگیرد. فضای نام جاری تحت تأثیر قرار نمیگیرد: برای یک دستور ایمپورت صحیح، یک دستورالعملSTORE_FASTبعدی فضای نام را تغییر میدهد.
- IMPORT_FROM(namei)¶
ویژگی
co_names[namei]را از ماژول یافتشده درSTACK[-1]بارگذاری میکند. شیء حاصل بر روی پشته قرار میگیرد تا سپس توسط یک دستورSTORE_FASTذخیره شود.
- JUMP_FORWARD(delta)¶
شمارندهی بایتکد را به اندازهی delta افزایش میدهد.
- JUMP_BACKWARD(delta)¶
شمارندهی بایتکد را به اندازهی delta کاهش میدهد. وقفهها را بررسی میکند.
اضافه شده در نسخهی 3.11.
- JUMP_BACKWARD_NO_INTERRUPT(delta)¶
شمارنده بایتکد را به اندازه delta کاهش میدهد. وقفهها را بررسی نمیکند.
اضافه شده در نسخهی 3.11.
- POP_JUMP_IF_TRUE(delta)¶
اگر
STACK[-1]درست باشد، شمارندهی بایتکد به میزان delta افزایش مییابد.STACK[-1]پاپ میشود.تغییر یافته در نسخهی 3.11: oparg اکنون یک دلتای نسبی است، نه یک هدف مطلق. این آپکد (opcode) یک شبهدستور است که در بایتکد نهایی با نسخههای جهتدار (رو به جلو/رو به عقب) جایگزین میشود.
تغییر یافته در نسخهی 3.12: این دیگر یک شبهدستور نیست.
تغییر یافته در نسخهی 3.13: این دستور اکنون به عملوندی دقیقاً از نوع
boolنیاز دارد.
- POP_JUMP_IF_FALSE(delta)¶
اگر
STACK[-1]نادرست باشد، شمارندهی بایتکد را به اندازهی delta افزایش میدهد.STACK[-1]پاپ میشود.تغییر یافته در نسخهی 3.11: oparg اکنون یک دلتای نسبی است، نه یک هدف مطلق. این آپکد (opcode) یک شبهدستور است که در بایتکد نهایی با نسخههای جهتدار (رو به جلو/رو به عقب) جایگزین میشود.
تغییر یافته در نسخهی 3.12: این دیگر یک شبهدستور نیست.
تغییر یافته در نسخهی 3.13: این دستور اکنون به عملوندی دقیقاً از نوع
boolنیاز دارد.
- POP_JUMP_IF_NOT_NONE(delta)¶
اگر
STACK[-1]برابرNoneنباشد، شمارنده بایتکد را به اندازه delta افزایش میدهد.STACK[-1]پاپ میشود.اضافه شده در نسخهی 3.11.
تغییر یافته در نسخهی 3.12: این دیگر یک شبهدستور نیست.
- POP_JUMP_IF_NONE(delta)¶
اگر
STACK[-1]برابرNoneباشد، شمارنده بایتکد را به اندازه delta افزایش میدهد.STACK[-1]برداشته میشود.اضافه شده در نسخهی 3.11.
تغییر یافته در نسخهی 3.12: این دیگر یک شبهدستور نیست.
- FOR_ITER(delta)¶
STACK[-1]is an iterator. Call its__next__()method. If this yields a new value, push it on the stack (leaving the iterator below it). If the iterator indicates it is exhausted then the byte code counter is incremented by delta.تغییر یافته در نسخهی 3.12: تا پیش از 3.11، پیمایشگر هنگامی که به پایان میرسید، از پشته برداشته میشد.
- LOAD_GLOBAL(namei)¶
متغیر سراسری با نام
co_names[namei>>1]را بر روی پشته بارگذاری میکند.تغییر یافته در نسخهی 3.11: اگر بیت کمارزشِ
nameiتنظیم شده باشد، یکNULLپیش از متغیر سراسری روی پشته قرار میگیرد.
- LOAD_FAST(var_num)¶
ارجاعی به متغیر محلی
co_varnames[var_num]را روی پشته میگذارد.تغییر یافته در نسخهی 3.12: این آپکد (opcode) اکنون تنها در موقعیتهایی استفاده میشود که مقداردهی اولیهی متغیر محلی تضمینشده باشد. نمیتواند
UnboundLocalErrorرا پرتاب کند.
- LOAD_FAST_BORROW(var_num)¶
یک ارجاع امانتی به متغیر محلی
co_varnames[var_num]را روی پشته قرار میدهد.اضافه شده در نسخهی 3.14.
- LOAD_FAST_LOAD_FAST(var_nums)¶
ارجاعها به
co_varnames[var_nums >> 4]وco_varnames[var_nums & 15]را روی پشته میگذارد.اضافه شده در نسخهی 3.13.
- LOAD_FAST_BORROW_LOAD_FAST_BORROW(var_nums)¶
ارجاعهای امانتی به
co_varnames[var_nums >> 4]وco_varnames[var_nums & 15]را روی پشته قرار میدهد.اضافه شده در نسخهی 3.14.
- LOAD_FAST_CHECK(var_num)¶
ارجاعی به متغیر محلی
co_varnames[var_num]را روی پشته قرار میدهد و اگر متغیر محلی مقداردهی اولیه نشده باشد، یکUnboundLocalErrorپرتاب میکند.اضافه شده در نسخهی 3.12.
- LOAD_FAST_AND_CLEAR(var_num)¶
ارجاعی به متغیر محلی
co_varnames[var_num]را روی پشته میگذارد (یا اگر متغیر محلی مقداردهی اولیه نشده باشد،NULLرا روی پشته میگذارد) وco_varnames[var_num]راNULLقرار میدهد.اضافه شده در نسخهی 3.12.
- STORE_FAST(var_num)¶
STACK.pop()را در متغیر محلیco_varnames[var_num]ذخیره میکند.
- STORE_FAST_STORE_FAST(var_nums)¶
STACK[-1]را درco_varnames[var_nums >> 4]وSTACK[-2]را درco_varnames[var_nums & 15]ذخیره میکند.اضافه شده در نسخهی 3.13.
- STORE_FAST_LOAD_FAST(var_nums)¶
STACK.pop()را در متغیر محلیco_varnames[var_nums >> 4]ذخیره میکند و ارجاعی به متغیر محلیco_varnames[var_nums & 15]را روی پشته قرار میدهد.اضافه شده در نسخهی 3.13.
- DELETE_FAST(var_num)¶
متغیر محلی
co_varnames[var_num]را حذف میکند.
- MAKE_CELL(i)¶
یک سلول جدید در جایگاه
iایجاد میکند. اگر آن جایگاه خالی نباشد، آن مقدار در سلول جدید ذخیره میشود.اضافه شده در نسخهی 3.11.
- LOAD_DEREF(i)¶
سلول موجود در جایگاه
iاز فضای ذخیرهسازی «fast locals» را بارگذاری میکند. ارجاعی به شیء درون سلول را روی پشته قرار میدهد.تغییر یافته در نسخهی 3.11:
iدیگر به اندازهی طولco_varnamesجابجا نمیشود.
- LOAD_FROM_DICT_OR_DEREF(i)¶
یک نگاشت را از پشته برمیدارد و نام مرتبط با جایگاه
iدر فضای ذخیرهسازی «fast locals» را در این نگاشت جستجو میکند. اگر نام در آنجا پیدا نشود، آن را از سلول موجود در جایگاهiبارگذاری میکند، مشابهLOAD_DEREF. این برای بارگذاری متغیرهای closure در بدنهی کلاسها (که پیشتر ازLOAD_CLASSDEREFاستفاده میشد) و در محدودههای annotation در داخل بدنهی کلاسها استفاده میشود.اضافه شده در نسخهی 3.12.
- STORE_DEREF(i)¶
STACK.pop()را در سلول موجود در جایگاهiاز فضای ذخیرهسازی «fast locals» ذخیره میکند.تغییر یافته در نسخهی 3.11:
iدیگر به اندازهی طولco_varnamesجابجا نمیشود.
- DELETE_DEREF(i)¶
سلول موجود در جایگاه
iاز فضای ذخیرهسازی «fast locals» را خالی میکند. توسط دستورdelاستفاده میشود.اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.11:
iدیگر به اندازهی طولco_varnamesجابجا نمیشود.
- COPY_FREE_VARS(n)¶
nمتغیرهای بستار را از بستار (closure) به فریم کپی میکند. نیاز به کد خاص در سمت فراخواننده هنگام فراخوانی بستارها را حذف میکند.اضافه شده در نسخهی 3.11.
- RAISE_VARARGS(argc)¶
با استفاده از یکی از ۳ شکل دستور
raise، بسته به مقدار argc، استثنایی را پرتاب میکند:0:
raise(پرتاب مجدد استثنای قبلی)1:
raise STACK[-1](پرتاب نمونه یا نوع استثنا درSTACK[-1])2:
raise STACK[-2] from STACK[-1](پرتاب نمونه یا نوع استثنای موجود درSTACK[-2]که__cause__آن بهSTACK[-1]تنظیم شده است)
- CALL(argc)¶
یک شیء فراخوانیپذیر را با تعداد آرگومانهای مشخصشده توسط
argcفراخوانی میکند. روی پشته (به ترتیب صعودی) این موارد قرار دارند:شیء فراخوانیپذیر
selfیاNULLآرگومانهای جایگاهی باقیمانده
argcتعداد کل آرگومانهای جایگاهی است، بدون احتسابself.CALLتمام آرگومانها و شیء فراخوانیپذیر را از پشته برمیدارد، شیء فراخوانیپذیر را با آن آرگومانها فراخوانی میکند و مقدار بازگشتی برگرداندهشده توسط شیء فراخوانیپذیر را روی پشته میگذارد.اضافه شده در نسخهی 3.11.
تغییر یافته در نسخهی 3.13: شیء فراخوانیپذیر اکنون همیشه در جایگاه یکسانی در پشته ظاهر میشود.
تغییر یافته در نسخهی 3.13: فراخوانیهای دارای آرگومان کلیدواژهای اکنون توسط
CALL_KWمدیریت میشوند.
- CALL_KW(argc)¶
یک شیء فراخوانیپذیر را با تعداد آرگومانهای مشخصشده توسط
argc، شامل یک یا چند آرگومان نامدار، فراخوانی میکند. روی پشته قرار دارند (به ترتیب صعودی):شیء فراخوانیپذیر
selfیاNULLآرگومانهای جایگاهی باقیمانده
آرگومانهای نامدار
یک
tupleاز نامهای آرگومانهای کلیدواژهای
argcمجموع تعداد آرگومانهای جایگاهی و نامدار، بهجزself، است. طول تاپل نامهای آرگومان کلیدواژهای برابر با تعداد آرگومانهای نامدار است.CALL_KWتمام آرگومانها، نامهای کلیدواژهای و شیء فراخوانیپذیر را از پشته برمیدارد، شیء فراخوانیپذیر را با آن آرگومانها فراخوانی میکند و مقدار بازگشتی را که شیء فراخوانیپذیر برمیگرداند، روی پشته قرار میدهد.اضافه شده در نسخهی 3.13.
- CALL_FUNCTION_EX(flags)¶
یک شیء فراخوانیپذیر را با مجموعهای متغیر از آرگومانهای جایگاهی و کلیدواژهای فراخوانی میکند. اگر پایینترین بیت flags تنظیم شده باشد، بالای پشته شامل یک شیء نگاشت است که حاوی آرگومانهای کلیدواژهای اضافی است. پیش از فراخوانی شیء فراخوانیپذیر، شیء نگاشت و شیء پیمایشپذیر هرکدام «واگشایی» میشوند و محتویات آنها بهترتیب بهعنوان آرگومانهای کلیدواژهای و جایگاهی ارسال میشوند.
CALL_FUNCTION_EXتمام آرگومانها و شیء فراخوانیپذیر را از پشته برمیدارد، شیء فراخوانیپذیر را با آن آرگومانها فراخوانی میکند و مقدار بازگشتی برگرداندهشده توسط شیء فراخوانیپذیر را بر پشته میگذارد.اضافه شده در نسخهی 3.6.
- PUSH_NULL¶
یک
NULLرا روی پشته قرار میدهد. در دنبالهی فراخوانی استفاده میشود تا باNULLای که توسطLOAD_METHODبرای فراخوانیهای غیرمتدی روی پشته قرار گرفته است، مطابقت داشته باشد.اضافه شده در نسخهی 3.11.
- MAKE_FUNCTION¶
یک شیء تابع جدید را که از شیء کد در
STACK[-1]ساخته شده است، روی پشته میگذارد.تغییر یافته در نسخهی 3.10: مقدار پرچم
0x04بهجای دیکشنری، یک تاپل از رشتهها استتغییر یافته در نسخهی 3.11: نام کامل در
STACK[-1]حذف شد.تغییر یافته در نسخهی 3.13: ویژگیهای اضافی تابع روی پشته، که با پرچمهای oparg مشخص میشدند، حذف شدند. اکنون برای آنها از
SET_FUNCTION_ATTRIBUTEاستفاده میشود.
- SET_FUNCTION_ATTRIBUTE(flag)¶
یک ویژگی را روی یک شیء تابع تنظیم میکند. انتظار دارد که تابع در
STACK[-1]و مقدار ویژگی برای تنظیم درSTACK[-2]قرار داشته باشد؛ هر دو را مصرف میکند و تابع را درSTACK[-1]باقی میگذارد. پرچم تعیین میکند کدام ویژگی تنظیم شود:0x01یک تاپل از مقادیر پیشفرض برای پارامترهای فقط جایگاهی و جایگاهی یا کلیدواژهای به ترتیب جایگاهی0x02یک دیکشنری از مقادیر پیشفرض پارامترهای فقط کلیدواژهای0x04یک تاپل از رشتهها شامل حاشیهنویسیهای پارامترها0x08یک تاپل حاوی سلولهایی برای متغیرهای آزاد، که یک بستار میسازد0x10annotate function برای شیء تابع
اضافه شده در نسخهی 3.13.
تغییر یافته در نسخهی 3.14:
0x10برای نشان دادن تابع حاشیهنویسی شیء تابع اضافه شد.
- BUILD_SLICE(argc)¶
یک شیء اسلایس را روی پشته قرار میدهد. argc باید ۲ یا ۳ باشد. اگر ۲ باشد، پیادهسازی میکند:
end = STACK.pop() start = STACK.pop() STACK.append(slice(start, end))
اگر ۳ باشد، پیادهسازی میکند:
step = STACK.pop() end = STACK.pop() start = STACK.pop() STACK.append(slice(start, end, step))
برای اطلاعات بیشتر، تابع توکار
slice()را ببینید.
- EXTENDED_ARG(ext)¶
قبل از هر آپکد (opcode) که آرگومان آن آنقدر بزرگ است که در ۱ بایت پیشفرض نمیگنجد، بهعنوان پیشوند قرار میگیرد. ext یک بایت اضافی را نگه میدارد که بهعنوان بیتهای بالاتر آرگومان عمل میکند. برای هر آپکد، حداکثر ۳
EXTENDED_ARGپیشوندی مجاز است تا آرگومانی از ۲ بایت تا ۴ بایت تشکیل دهند.
- CONVERT_VALUE(oparg)¶
مقدار را به رشته تبدیل میکند، بسته به
oparg:value = STACK.pop() result = func(value) STACK.append(result)
oparg == 1: تابعstr()را روی value فراخوانی کنیدoparg == 2:repr()را روی value فراخوانی میکندoparg == 3:ascii()روی value فراخوانی میشود
برای پیادهسازی مقادیر لفظی رشته قالببندیشده (افاسترینگها) استفاده میشود.
اضافه شده در نسخهی 3.13.
- FORMAT_SIMPLE¶
مقدار بالای پشته را قالببندی میکند:
value = STACK.pop() result = value.__format__("") STACK.append(result)
برای پیادهسازی مقادیر لفظی رشته قالببندیشده (افاسترینگها) استفاده میشود.
اضافه شده در نسخهی 3.13.
- FORMAT_WITH_SPEC¶
مقدار دادهشده را با مشخصه قالب دادهشده قالببندی میکند:
spec = STACK.pop() value = STACK.pop() result = value.__format__(spec) STACK.append(result)
برای پیادهسازی مقادیر لفظی رشته قالببندیشده (افاسترینگها) استفاده میشود.
اضافه شده در نسخهی 3.13.
- MATCH_CLASS(count)¶
STACK[-1]تاپلی از نام ویژگیهای کلیدواژهای است،STACK[-2]کلاسی است که با آن تطبیق داده میشود، وSTACK[-3]موضوع تطبیق است. count تعداد زیرالگوهای جایگاهی است.STACK[-1]،STACK[-2]وSTACK[-3]را از پشته بردارید. اگرSTACK[-3]نمونهای ازSTACK[-2]باشد و دارای ویژگیهای جایگاهی و کلیدواژهای مورد نیاز count وSTACK[-1]باشد، یک تاپل از ویژگیهای استخراجشده را روی پشته قرار دهید. در غیر این صورت،Noneرا روی پشته قرار دهید.اضافه شده در نسخهی 3.10.
تغییر یافته در نسخهی 3.11: پیشتر، این دستورالعمل همچنین یک مقدار بولی را که نشاندهندهی موفقیت (
True) یا شکست (False) بود، روی پشته میگذاشت.
- RESUME(context)¶
عملیات بیاثر (no-op). بررسیهای ردگیری داخلی، اشکالزدایی و بهینهسازی را انجام میدهد.
عملوند
contextاز دو بخش تشکیل شده است. دو بیت کمارزش نشان میدهند کهRESUMEکجا رخ میدهد:0آغاز تابعی که نه تولیدگر، نه همروال و نه تولیدگر ناهمگام است1پس از یک عبارتyield2پس از یک عبارتyield from3پس از یک عبارتawait
بیت بعدی، اگر RESUME در عمق استثنا (except-depth)
1باشد،1است و در غیر این صورت0است.اضافه شده در نسخهی 3.11.
تغییر یافته در نسخهی 3.13: مقدار oparg تغییر کرد تا شامل اطلاعاتی دربارهی عمق استثنا (except-depth) شود.
- RETURN_GENERATOR¶
یک تولیدگر، همروال یا تولیدگر ناهمگام از فریم جاری ایجاد میکند. بهعنوان نخستین کد عملیات (opcode) در شیء کد برای موارد فراخوانیپذیر ذکرشده در بالا استفاده میشود. فریم جاری را پاک میکند و تولیدگر تازهساخته را برمیگرداند.
اضافه شده در نسخهی 3.11.
- SEND(delta)¶
معادل
STACK[-1] = STACK[-2].send(STACK[-1])است. در دستوراتyield fromوawaitاستفاده میشود.اگر فراخوانی
StopIterationرا پرتاب کند، مقدار سر پشته را بردارید، ویژگیvalueاستثنا را بر پشته بگذارید و شمارنده بایتکد را به اندازهی delta افزایش دهید.اضافه شده در نسخهی 3.11.
- HAVE_ARGUMENT¶
این واقعاً یک آپکد (opcode) نیست. این خط جداکنندهی میان آپکدها در بازهی [۰،۲۵۵] را مشخص میکند: میان کدهایی که از آرگومان خود استفاده نمیکنند و کدهایی که استفاده میکنند (بهترتیب
< HAVE_ARGUMENTو>= HAVE_ARGUMENT).اگر برنامهی شما از شبهدستورالعملها یا دستورالعملهای تخصصی استفاده میکند، در عوض از مجموعهی
hasargاستفاده کنید.تغییر یافته در نسخهی 3.6: اکنون هر دستورالعمل یک آرگومان دارد، اما opcodeهای
< HAVE_ARGUMENTآن را در نظر نمیگیرند. پیش از این، فقط opcodeهای>= HAVE_ARGUMENTآرگومان داشتند.تغییر یافته در نسخهی 3.12: شبهدستورالعملها به ماژول
disافزوده شدند، و در مورد آنها مقایسه باHAVE_ARGUMENTنشان نمیدهد که آیا از آرگومان خود استفاده میکنند.منسوخ شده از نسخهی 3.13: بهجای آن از
hasargاستفاده کنید.
- CALL_INTRINSIC_1¶
یک تابع ذاتی (intrinsic function) را با یک آرگومان فراخوانی میکند.
STACK[-1]را بهعنوان آرگومان ارسال میکند وSTACK[-1]را برابر با نتیجه قرار میدهد. برای پیادهسازی قابلیتی استفاده میشود که از نظر کارایی حیاتی نیست.عملوند تعیین میکند که کدام تابع ذاتی فراخوانی میشود:
عملوند
توضیحات
INTRINSIC_1_INVALIDنامعتبر
INTRINSIC_PRINTآرگومان را در خروجی استاندارد چاپ میکند. در REPL استفاده میشود.
INTRINSIC_IMPORT_STARimport *را برای ماژول نامبردهشده اجرا میکند.INTRINSIC_STOPITERATION_ERRORمقدار بازگشتی را از یک استثنای
StopIterationاستخراج میکند.INTRINSIC_ASYNC_GEN_WRAPیک مقدار تولیدگر ناهمگام را دربر میگیرد
INTRINSIC_UNARY_POSITIVEعملیات
+یکعملوندی را انجام میدهدINTRINSIC_LIST_TO_TUPLEیک فهرست را به تاپل تبدیل میکند
INTRINSIC_TYPEVARیک
typing.TypeVarایجاد میکندINTRINSIC_PARAMSPECیک
typing.ParamSpecایجاد میکندINTRINSIC_TYPEVARTUPLEیک
typing.TypeVarTupleایجاد میکندINTRINSIC_SUBSCRIPT_GENERICtyping.Genericزیرنویسشده با آرگومان را برمیگرداندINTRINSIC_TYPEALIASیک
typing.TypeAliasTypeایجاد میکند؛ در دستورtypeاستفاده میشود. آرگومان، تاپلی از نام، پارامترهای نوع و مقدار ناممستعار نوع است.اضافه شده در نسخهی 3.12.
- CALL_INTRINSIC_2¶
یک تابع ذاتی را با دو آرگومان فراخوانی میکند. برای پیادهسازی قابلیتی که از نظر کارایی حیاتی نیست، استفاده میشود:
arg2 = STACK.pop() arg1 = STACK.pop() result = intrinsic2(arg1, arg2) STACK.append(result)
عملوند تعیین میکند که کدام تابع ذاتی فراخوانی میشود:
عملوند
توضیحات
INTRINSIC_2_INVALIDنامعتبر
INTRINSIC_PREP_RERAISE_STARExceptionGroupرا برای پرتاب از یکtry-except*محاسبه میکند.INTRINSIC_TYPEVAR_WITH_BOUNDیک
typing.TypeVarبا یک کران ایجاد میکند.INTRINSIC_TYPEVAR_WITH_CONSTRAINTSیک
typing.TypeVarبا محدودیتها ایجاد میکند.INTRINSIC_SET_FUNCTION_TYPE_PARAMSویژگی
__type_params__یک تابع را تنظیم میکند.اضافه شده در نسخهی 3.12.
- LOAD_SPECIAL¶
جستجوی متد ویژه را روی
STACK[-1]انجام میدهد. اگرtype(STACK[-1]).__xxx__یک متد باشد،type(STACK[-1]).__xxx__; STACK[-1]را روی پشته باقی میگذارد. اگرtype(STACK[-1]).__xxx__یک متد نباشد،STACK[-1].__xxx__; NULLرا روی پشته باقی میگذارد.اضافه شده در نسخهی 3.14.
شبهدستورالعملها
این آپکدها (opcodes) در بایتکد پایتون ظاهر نمیشوند. کامپایلر از آنها استفاده میکند، اما پیش از تولید بایتکد، با آپکدهای واقعی جایگزین یا حذف میشوند.
- SETUP_FINALLY(target)¶
برای بلوک کد زیر یک مدیر استثنا تنظیم کنید. اگر استثنایی رخ دهد، سطح پشتهی مقدار به وضعیت فعلی خود بازمیگردد و کنترل به مدیر استثنا در
targetمنتقل میشود.
- SETUP_CLEANUP(target)¶
مانند
SETUP_FINALLY، اما در صورت بروز استثنا، آخرین دستور (lasti) را نیز روی پشته میگذارد تاRERAISEبتواند آن را بازیابی کند. اگر استثنا رخ دهد، سطح پشتهی مقدار و آخرین دستور روی فریم به وضعیت کنونی خود بازمیگردند و کنترل به مدیر استثنا درtargetمنتقل میشود.
- SETUP_WITH(target)¶
مانند
SETUP_CLEANUP، اما در صورت بروز استثنا، یک آیتم دیگر از پشته برداشته میشود، پیش از آنکه کنترل به مدیر استثنا درtargetمنتقل شود.این گونه در ساختهای
withوasync withاستفاده میشود، که مقدار بازگشتی__enter__()یا__aenter__()مدیر زمینه را روی پشته قرار میدهند.
- POP_BLOCK¶
پایان بلوک کد مرتبط با آخرین
SETUP_FINALLY،SETUP_CLEANUPیاSETUP_WITHرا مشخص میکند.
- LOAD_CONST_IMMORTAL(consti)¶
مانند
LOAD_CONSTعمل میکند، اما برای اشیاء نامیرا کارآمدتر است.
- JUMP¶
- JUMP_NO_INTERRUPT¶
دستورهای پرش نسبی بدون جهت که توسط اسمبلر با همتایان جهتدار (رو به جلو/رو به عقب) خود جایگزین میشوند.
- JUMP_IF_TRUE¶
- JUMP_IF_FALSE¶
پرشهای شرطی که بر پشته تأثیر نمیگذارند. با دنبالهی
COPY 1،TO_BOOL،POP_JUMP_IF_TRUE/FALSEجایگزین شدهاند.
- LOAD_CLOSURE(i)¶
ارجاعی به سلول موجود در جایگاه
iاز فضای ذخیرهسازی «متغیرهای محلی سریع» (fast locals) را روی پشته قرار میدهد.توجه داشته باشید که
LOAD_CLOSUREدر اسمبلر (assembler) باLOAD_FASTجایگزین میشود.تغییر یافته در نسخهی 3.13: این آپکد (opcode) اکنون یک شبهدستور (pseudo-instruction) است.
مجموعههای آپکد (opcode)¶
این مجموعهها برای دروننگری خودکار دستورالعملهای بایتکد فراهم شدهاند:
تغییر یافته در نسخهی 3.12: مجموعهها اکنون شامل شبهدستورالعملها (pseudo instructions) و دستورالعملهای ابزاربندیشده (instrumented instructions) نیز هستند. این آپکدها (opcodes) با مقادیر >= MIN_PSEUDO_OPCODE و >= MIN_INSTRUMENTED_OPCODE هستند.
- dis.opname¶
دنبالهای از نامهای عملیات، که با استفاده از بایتکد قابل اندیسدهی است.
- dis.opmap¶
دیکشنری که نام عملیاتها را به بایتکدها نگاشت میکند.
- dis.cmp_op¶
دنبالهای از تمام نامهای عملیات مقایسه.
- dis.hasarg¶
دنبالهای از بایتکدها که از آرگومان خود استفاده میکنند.
اضافه شده در نسخهی 3.12.
- dis.hasconst¶
دنبالهای از بایتکدها که به یک ثابت دسترسی دارند.
- dis.hasfree¶
دنبالهای از بایتکدها که به یک متغیر آزاد (بستار) دسترسی دارند. در این زمینه، «آزاد» به نامهایی در محدوده فعلی اشاره دارد که محدودههای داخلی به آنها ارجاع دادهاند، یا به نامهایی در محدودههای بیرونی که این محدوده به آنها ارجاع داده است. این شامل ارجاعها به محدودههای سراسری یا توکار نمیشود.
- dis.hasname¶
دنبالهای از بایتکدها که به یک ویژگی بر اساس نام دسترسی پیدا میکنند.
- dis.hasjump¶
دنبالهای از بایتکدها که هدف پرش دارند. تمام پرشها نسبی هستند.
اضافه شده در نسخهی 3.13.
- dis.haslocal¶
دنبالهای از بایتکدها (bytecodes) که به یک متغیر محلی دسترسی پیدا میکنند.
- dis.hascompare¶
دنبالهای از بایتکدهای عملیات بولی.
- dis.hasexc¶
دنبالهای از بایتکدها که یک هندلر استثنا را تنظیم میکنند.
اضافه شده در نسخهی 3.12.
- dis.hasjrel¶
دنبالهای از بایتکدها که مقصد پرش نسبی دارند.
منسوخ شده از نسخهی 3.13: همه پرشها اکنون نسبی هستند. از
hasjumpاستفاده کنید.
- dis.hasjabs¶
دنبالهای از بایتکدها که هدف پرش مطلق دارند.
منسوخ شده از نسخهی 3.13: همهی پرشها اکنون نسبی هستند. این فهرست خالی است.