سطح مقدماتی (Beginner Level)
در پایتون، اعداد صحیح (Integers) تنها مقادیر خام نیستند؛ آنها شیء (Object) هستند. این یعنی حتی یک عدد ساده مثل 10 دارای ویژگیها و متدهایی است که میتوانیم آنها را صدا بزنیم. در حالی که اعداد صحیح متدهای زیادی (مانند رشتهها) ندارند، اما متدهای موجود برای محاسبات باینری و تبدیل دادهها بسیار حیاتی هستند.
در این بخش با متدهای پایهای که برای درک ساختار اعداد نیاز دارید، آشنا میشویم.
۱. متد bit_length()
این متد تعداد بیتهای مورد نیاز برای نمایش یک عدد در مبنای دو (Binary) را برمیگرداند (بدون در نظر گرفتن بیت علامت و صفرهای سمت چپ).
کاربرد
زمانی که میخواهید بدانید یک عدد چه مقدار فضا در حافظه (به صورت بیتهای خالص) اشغال میکند، از این متد استفاده میشود.
۲. متد as_integer_ratio()
این متد یک تاپل شامل دو عدد برمیگرداند: صورت و مخرج. از آنجا که اعداد int همیشه گویا و صحیح هستند، مخرج همیشه ۱ خواهد بود. این متد بیشتر برای هماهنگی (Compatibility) با نوع داده float وجود دارد.
# مثال ۴: قطعه کد مقایسه (Static - Snippet)
# این متد در فلوتها کاربردیتر است اما در int اینگونه تعریف میشود:
def check_ratio(n):
return n.as_integer_ratio() == (n, 1) # همیشه True برای int
سطح پیشرفته (Professional Level)
در سطح حرفهای، متدهای int ابزارهای قدرتمندی برای کار با دادههای سطح پایین (Low-level)، شبکه (Networking)، و رمزنگاری (Cryptography) هستند. در اینجا روی دستکاری بایتها و بهینهسازی تمرکز میکنیم.
۱. شمارش بیتهای روشن با bit_count()
این متد (که در پایتون ۳.۱۰ اضافه شد) تعداد بیتهایی که مقدارشان 1 است را میشمارد. به این عملیات در علوم کامپیوتر "Population Count" یا "Popcount" میگویند.
۲. تبدیل به بایت با to_bytes()
این یکی از مهمترین متدها برای برنامه نویسی شبکه و ذخیرهسازی فایل است. این متد عدد را به آرایهای از بایتها (bytes) تبدیل میکند.
پارامترها:
length: تعداد بایتهای خروجی.byteorder: ترتیب بایتها ('big'یا'little').signed: (اختیاری) آیا عدد علامتدار است یا خیر.
# ساختار کلی (Static - Definition)
int.to_bytes(length, byteorder, *, signed=False)
۳. تبدیل بایت به عدد با from_bytes()
این متد کلاس (Class Method) است و برعکس عمل بالا را انجام میدهد: رشتهای از بایتها را گرفته و به عدد صحیح تبدیل میکند.
۴. نکات فنی و مدیریت حافظه
اعداد صحیح در پایتون "Arbitrary Precision" هستند، یعنی محدودیت ۶۴ بیتی ندارند و تا جایی که رم اجازه دهد بزرگ میشوند. اما پایتون برای اعداد کوچک (بین -5 تا 256) از تکنیک Interning (کش کردن) استفاده میکند.
# مثال ۱۰: مدیریت خطا در تبدیل بایت (Static - Overflow)
def safe_to_bytes(number, size):
try:
return number.to_bytes(size, byteorder='big')
except OverflowError:
return "Error: Number too large for this byte size"