خانه / آموزش‌ها / آموزش کامل تابع Range در پایتون

آموزش کامل تابع Range در پایتون

🐍 HomeOfPython
|
📅 1404/10/23

سطح مقدماتی (Beginner Level)

تابع range() یکی از پرکاربردترین ابزارهای پایتون برای تولید دنباله‌ای از اعداد است. اگرچه اغلب ما آن را در حلقه‌های for می‌بینیم، اما range به خودی خود یک نوع داده (Data Type) مستقل است که رفتارهای خاصی دارد.

در این بخش یاد می‌گیریم چگونه با آرگومان‌های مختلف آن کار کنیم و دنباله‌های صعودی یا نزولی بسازیم.

۱. ساختار کلی (Syntax)

تابع range می‌تواند ۱، ۲ یا ۳ ورودی دریافت کند. درک تفاوت این حالت‌ها اولین قدم است.

  1. range(stop): از صفر شروع می‌کند و تا یکی مانده به stop پیش می‌رود.
  2. range(start, stop): از start شروع می‌کند و تا یکی مانده به stop پیش می‌رود.
  3. range(start, stop, step): مشابه حالت قبل، اما با گام‌های step حرکت می‌کند.
Python
Python
Python

۲. گام‌های منفی (شمارش معکوس)

برای ایجاد شمارش معکوس، باید گام (Step) را عددی منفی در نظر بگیرید و دقت کنید که عدد start باید بزرگتر از stop باشد.

Python
python
# 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 تبدیل می‌کنیم.

Python

توضیحات


سطح پیشرفته (Professional Level)

در این بخش نگاهی عمیق‌تر به ماهیت range می‌اندازیم. برخلاف تصور بسیاری از مبتدیان، در پایتون ۳، range یک تابع معمولی نیست که یک لیست برگرداند، بلکه یک Immutable Sequence Type (نوع داده ترتیبی تغییرناپذیر) است.

۱. مدیریت حافظه (Memory Efficiency)

یکی از مهم‌ترین ویژگی‌های range در پایتون ۳ این است که "تنبلی" (Lazy) عمل می‌کند. فرقی نمی‌کند بازه شما ۱۰ عدد باشد یا ۱۰ میلیارد عدد؛ آبجکت range همیشه مقدار ثابتی از حافظه را اشغال می‌کند زیرا اعداد را در حافظه ذخیره نمی‌کند، بلکه آن‌ها را در لحظه نیاز محاسبه می‌کند.

Python
python
# 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) است.

Python
Python

۳. محدودیت‌ها و نکات فنی

تابع range فقط با اعداد صحیح (Integers) کار می‌کند. برای تولید بازه‌های اعشاری (Float)، نمی‌توانید مستقیماً از range استفاده کنید.

راهکار: استفاده از کتابخانه numpy یا نوشتن یک جنریتور شخصی.

Python
python
# 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 در صورتی برابرند که دقیقا همان دنباله از اعداد را تولید کنند، حتی اگر پارامترهای تعریف آن‌ها متفاوت باشد (مثلاً زمانی که بازه خالی است یا طول یکسانی دارند).

Python