سطح مقدماتی (Beginner Level)
تابع range() یکی از پرکاربردترین ابزارهای پایتون برای تولید دنبالهای از اعداد است. اگرچه اغلب ما آن را در حلقههای for میبینیم، اما range به خودی خود یک نوع داده (Data Type) مستقل است که رفتارهای خاصی دارد.
در این بخش یاد میگیریم چگونه با آرگومانهای مختلف آن کار کنیم و دنبالههای صعودی یا نزولی بسازیم.
۱. ساختار کلی (Syntax)
تابع range میتواند ۱، ۲ یا ۳ ورودی دریافت کند. درک تفاوت این حالتها اولین قدم است.
range(stop): از صفر شروع میکند و تا یکی مانده بهstopپیش میرود.range(start, stop): ازstartشروع میکند و تا یکی مانده بهstopپیش میرود.range(start, stop, step): مشابه حالت قبل، اما با گامهایstepحرکت میکند.
۲. گامهای منفی (شمارش معکوس)
برای ایجاد شمارش معکوس، باید گام (Step) را عددی منفی در نظر بگیرید و دقت کنید که عدد start باید بزرگتر از stop باشد.
# Example 2: Common Mistake (Empty Range)
# If start < stop with a negative step, result is empty
empty_range = range(5, 10, -1)
# Result: []
۳. تبدیل Range به لیست
به خودی خود، اگر range را پرینت کنید، اعداد را نمیبینید (چون یک تولیدکننده است). برای دیدن همه اعداد به صورت یکجا، معمولاً آن را به list یا tuple تبدیل میکنیم.

سطح پیشرفته (Professional Level)
در این بخش نگاهی عمیقتر به ماهیت range میاندازیم. برخلاف تصور بسیاری از مبتدیان، در پایتون ۳، range یک تابع معمولی نیست که یک لیست برگرداند، بلکه یک Immutable Sequence Type (نوع داده ترتیبی تغییرناپذیر) است.
۱. مدیریت حافظه (Memory Efficiency)
یکی از مهمترین ویژگیهای range در پایتون ۳ این است که "تنبلی" (Lazy) عمل میکند. فرقی نمیکند بازه شما ۱۰ عدد باشد یا ۱۰ میلیارد عدد؛ آبجکت range همیشه مقدار ثابتی از حافظه را اشغال میکند زیرا اعداد را در حافظه ذخیره نمیکند، بلکه آنها را در لحظه نیاز محاسبه میکند.
# Example 2: Why lists are heavy (Static comparison)
# A list of 1 billion items would crash most RAMs
# huge_list = list(range(1000000000)) # Don't run this!
۲. عملیاتهای O(1) (تست عضویت)
از آنجایی که range از یک فرمول ریاضی مشخص پیروی میکند، پایتون برای چک کردن اینکه آیا یک عدد در بازه وجود دارد یا خیر، نیازی به پیمایش کل اعداد ندارد. این عملیات با پیچیدگی زمانی O(1) انجام میشود، در حالی که در لیستها O(n) است.
۳. محدودیتها و نکات فنی
تابع range فقط با اعداد صحیح (Integers) کار میکند. برای تولید بازههای اعشاری (Float)، نمیتوانید مستقیماً از range استفاده کنید.
راهکار: استفاده از کتابخانه numpy یا نوشتن یک جنریتور شخصی.
# Example 2: Using NumPy (Standard Industry Way)
import numpy as np
# arange is the equivalent for floats/arrays
arr = np.arange(0.5, 5.5, 0.5)
۴. مقایسه آبجکتهای Range
دو آبجکت range در صورتی برابرند که دقیقا همان دنباله از اعداد را تولید کنند، حتی اگر پارامترهای تعریف آنها متفاوت باشد (مثلاً زمانی که بازه خالی است یا طول یکسانی دارند).