همهچیز درباره تابع range در پایتون: از مفاهیم پایه تا ترفندهای حرفهای
فهرست مطالب
در برنامهنویسی با پایتون، ابزارهای متنوعی برای تولید و کنترل دنبالهها وجود دارد که یکی از پرکاربردترین آنها تابع Range در پایتون است. این تابع به شما امکان میدهد بهسادگی لیست یا بازهای از اعداد را ایجاد کنید، بدون آنکه نیاز به نوشتن چندین خط کد داشته باشید. از حلقههای for گرفته تا ساختارهای داده پیشرفته، تابع Range در پایتون نقش مهمی در سادهسازی و بهینهسازی کدنویسی ایفا میکند. اگر قصد دارید این تابع را بهصورت کامل یاد بگیرید و با ترفندهای کاربردی آن آشنا شوید. برای درک بهتر مفاهیم پایهای پایتون و تسلط بیشتر بر برنامهنویسی، پیشنهاد میکنیم از آموزش ریاضیات برای پایتون استفاده کنید که مفاهیم ریاضی مورد نیاز در کدنویسی را به صورت کاربردی آموزش میدهد
جدول مقایسه عملکرد با جایگزینهای تابع range
| روش تولید دنباله | نوع داده خروجی | پشتیبانی از اعداد اعشاری | مصرف حافظه | سرعت اجرا | مثال |
| range() | range object (قابل تکرار) | ❌ | بسیار کم (Lazy Evaluation) | بسیار سریع | range(1, 1000000) |
| list(range()) | list | ❌ | بالا (ذخیره کل لیست در حافظه) | سریع ولی کندتر از range() | list(range(1, 1000000)) |
| numpy.arange() | numpy.ndarray | ✅ | متوسط | سریع برای دادههای عددی بزرگ | np.arange(0.5, 5, 0.5) |
| while loop | — | ✅ | وابسته به پیادهسازی | معمولاً کندتر | حلقه دستی با افزایش متغیر |
| itertools.count() | Iterator بیپایان | ✅ | بسیار کم | سریع | count(start=0, step=1) |
نکات مهم مقایسه:
- تابع Range در پایتون از مکانیزم Lazy Evaluation استفاده میکند، یعنی اعداد را در لحظه نیاز تولید میکند و همین باعث مصرف کم حافظه میشود.
- اگر بخواهید با اعداد اعشاری کار کنید، arange() یا حلقه دستی گزینههای بهتری هستند.
- استفاده از لیست معمولی (list(range())) فقط زمانی توصیه میشود که واقعاً نیاز به ذخیره همه مقادیر داشته باشید.
- برای تولید دنبالههای بیپایان، count() کارآمدتر است.
تابع Range در پایتون چیست؟
تابع Range در پایتون یک تابع داخلی (Built-in Function) است که برای ایجاد دنبالهای از اعداد صحیح استفاده میشود. این تابع معمولاً در حلقههای for یا ساختارهای تکرار به کار میرود تا بهجای نوشتن دستی مقادیر، بتوانیم یک بازه عددی مشخص را بهطور خودکار تولید کنیم. خروجی تابع Range در پایتون یک شیء از نوع range است که میتواند به لیست یا تاپل تبدیل شود و بسته به مقادیر ورودی، شروع، پایان و گام حرکت اعداد را تعیین میکند.
بهطور کلی، این تابع سه پارامتر دارد:
- start – عدد شروع (اختیاری، پیشفرض صفر)
- stop – عدد پایان (الزامی)
- step – فاصله بین اعداد (اختیاری، پیشفرض ۱)
برای مثال:
for i in range(1, 6): print(i)
خروجی:
1 2 3 4 5
اکنون که بر محاسبات توان در پایتون تسلط پیدا کردهاید، وقت آن است که مهارتهای ریاضی خود را به سطح بالاتری ببرید.
برای دریافت مشاوره و اطلاعات بیشتر، با ما تماس بگیرید۰۹۹۰۵۵۰۱۹۹۸
سینتکس تابع Range در پایتون چگونه است؟
سینتکس کلی تابع Range در پایتون به شکل زیر است:
range(start, stop, step)
این ساختار سه پارامتر دارد که هر کدام نقش مشخصی ایفا میکنند:
- start (شروع)
- عددی که دنباله از آن آغاز میشود.
- مقدار پیشفرض آن 0 است.
- اگر این مقدار را تعیین نکنید، پایتون به صورت خودکار از صفر شروع میکند.
- stop (پایان)
- عددی که دنباله پیش از رسیدن به آن متوقف میشود.
- این پارامتر اجباری است.
- توجه کنید که عدد stop شامل بازه نمیشود. به عنوان مثال، در range(1, 5) اعداد 1 تا 4 تولید میشوند، نه 5.
- step (گام)
- فاصله بین هر دو عدد متوالی در دنباله.
- مقدار پیشفرض آن 1 است.
- اگر مقدار منفی باشد، دنباله به صورت معکوس تولید میشود.
مثالهای کاربردی:
# نمونه 1: فقط stop مشخص شده print(list(range(5))) # [0, 1, 2, 3, 4]
# نمونه 2: start و stop مشخص شده print(list(range(2, 7))) # [2, 3, 4, 5, 6]
# نمونه 3: استفاده از step مثبت print(list(range(1, 10, 2))) # [1, 3, 5, 7, 9]
# نمونه 4: استفاده از step منفی print(list(range(10, 0, -2))) # [10, 8, 6, 4, 2]
اگر میخواهید با سینتکس و دستورات مختلف پایتون آشنا شوید، میتوانید به لیست دستورات پایتون مراجعه کنید که یک مرجع کامل و جامع برای یادگیری دستورات است.
به نقل از سایت geeksforgeeks:
«به زبان ساده، تابع range() به کاربر اجازه میدهد تا مجموعهای از اعداد را در یک محدوده مشخص تولید کند. بسته به تعداد آرگومانهایی که کاربر به تابع ارسال میکند، کاربر میتواند تصمیم بگیرد که آن مجموعه اعداد از کجا شروع و پایان یابد، و همچنین تفاوت بین یک عدد و عدد بعدی چقدر باشد.»
پیادهسازی تابع range در پایتون
تابع Range در پایتون را میتوان با تعداد مختلفی از پارامترها استفاده کرد: یک پارامتر، دو پارامتر یا سه پارامتر. هر حالت کاربرد خاص خود را دارد و دانستن آنها به شما کمک میکند تا کدهای بهینهتر و خواناتری بنویسید. در ادامه هر حالت را به همراه نمونه کد بررسی میکنیم.
پیادهسازی تابع range با یک پارامتر در پایتون
زمانی که تابع Range در پایتون تنها یک پارامتر دریافت کند، آن پارامتر به عنوان مقدار stop در نظر گرفته میشود و مقدار start به طور پیشفرض 0 است.
# ایجاد دنباله از 0 تا 4 for num in range(5): print(num)
خروجی
0 1 2 3 4
در این حالت، دنباله از صفر شروع شده و قبل از رسیدن به عدد stop متوقف میشود.
پیادهسازی تابع range با دو پارامتر در پایتون
زمانی که دو پارامتر به تابع Range در پایتون بدهید، پارامتر اول start و پارامتر دوم stop خواهد بود.
# ایجاد دنباله از 2 تا 6 for num in range(2, 7): print(num)
خروجی
2 3 4 5 6
این حالت برای زمانی مناسب است که بخواهید بازهای غیر از صفر را به عنوان نقطه شروع داشته باشید.
پیادهسازی تابع range با سه پارامتر در پایتون
وقتی سه پارامتر استفاده کنید، پارامتر اول start، پارامتر دوم stop و پارامتر سوم step است که فاصله بین اعداد را مشخص میکند.
# ایجاد دنباله با گام مثبت for num in range(1, 10, 2): print(num)
# ایجاد دنباله با گام منفی for num in range(10, 0, -2): print(num)
خروجی
1 3 5 7 9 10 8 6 4 2
این حالت انعطافپذیرترین روش استفاده از تابع Range در پایتون است، زیرا میتوانید هم بازه و هم جهت حرکت را کنترل کنید.
استفاده از تابع range در پایتون
تابع Range در پایتون یکی از ابزارهای پرکاربرد برای تولید دنبالههای عددی است که در شرایط مختلف میتوان از آن استفاده کرد. در این بخش، چند روش مهم و پرکاربرد استفاده از این تابع را بررسی میکنیم.
افزایش دنباله با استفاده از یک گام مثبت
زمانی که مقدار step مثبت باشد، دنباله به صورت صعودی تولید میشود.
# دنباله از 1 تا 9 با گام 2 for num in range(1, 10, 2): print(num)
خروجی:
1 3 5 7 9
این روش برای تولید اعداد صعودی با فاصله مشخص استفاده میشود.
استفاده از تابع range با گام منفی در پایتون
اگر مقدار step منفی باشد، دنباله به صورت نزولی ساخته میشود.
# دنباله از 10 تا 2 با گام -2 for num in range(10, 0, -2): print(num)
خروجی:
10 8 6 4 2
این حالت برای شمارش معکوس یا تولید لیستهای نزولی بسیار مفید است.
اتصال دو تابع range با متد chain() از ماژول itertools
با استفاده از متد chain() میتوان چند دنباله تولید شده توسط تابع Range در پایتون را به هم متصل کرد.
from itertools import chain # اتصال دو دنباله for num in chain(range(1, 5), range(10, 13)): print(num) from itertools import chain
# اتصال دو دنباله for num in chain(range(1, 5), range(10, 13)): print(num)
خروجی:
1 2 3 4 10 11 12
این روش زمانی کاربرد دارد که بخواهید چند بازه جداگانه را در یک حلقه پردازش کنید.
تابع range با لیست در پایتون
میتوان خروجی تابع Range در پایتون را به یک لیست تبدیل کرد تا به راحتی قابل مشاهده یا پردازش باشد.
nums = list(range(5)) print(nums)
خروجی:
[0, 1, 2, 3, 4]
تبدیل به لیست باعث میشود بتوانید به تمام مقادیر تولید شده به صورت یکجا دسترسی داشته باشید.
استفاده از تابع range با مقادیر اعشاری در پایتون
خود تابع Range در پایتون به صورت پیشفرض فقط از اعداد صحیح پشتیبانی میکند. برای تولید دنباله اعشاری باید از روشهای جایگزین مثل numpy.arange() یا محاسبات دستی استفاده کنید.
import numpy as np # دنباله اعشاری با numpy for num in np.arange(0.5, 2.5, 0.5): print(num)
خروجی:
0.5 1.0 1.5 2.0
این روش برای کار با دادههای علمی و محاسبات دقیقتر مناسب است.
دسترسی به تابع range با استفاده از مقدار اندیس
خروجی تابع Range در پایتون مانند یک لیست رفتار میکند و میتوان با استفاده از ایندکس به عناصر آن دسترسی داشت.
r = range(10, 20, 2) print(r[0]) # عنصر اول print(r[-1]) # عنصر آخر
خروجی:
10 18
این قابلیت زمانی مفید است که بخواهید فقط به بخشی از دنباله دسترسی داشته باشید، نه کل آن.
ترفندهای بهینهسازی
برای استفاده بهتر و کارآمدتر از تابع Range در پایتون، میتوانید از چند ترفند ساده ولی مؤثر استفاده کنید. این نکات به شما کمک میکنند کدتان سریعتر اجرا شود، حافظه کمتری مصرف کند و خوانایی بهتری داشته باشد. همچنین برای کسانی که علاقهمند به ورود به دنیای هوش مصنوعی هستند، آموزش هوش مصنوعی از صفر یک نقطه شروع عالی و جامع محسوب میشود.
1. استفاده از Range به جای لیستهای از پیش ساخته شده
به جای این که یک لیست بزرگ از اعداد بسازید، از تابع Range در پایتون استفاده کنید تا حافظه کمتری مصرف شود.
# بهینهتر for num in range(1_000_000): pass # کمتر بهینه for num in list(range(1_000_000)): pass
در حالت اول، حافظه بهینهتر مصرف میشود چون Range مقادیر را لحظهای تولید میکند.
2. استفاده از گام مناسب برای کاهش تعداد تکرارها
اگر نیازی به همه اعداد ندارید، با تنظیم step مناسب تعداد تکرارها را کاهش دهید.
# چاپ اعداد فرد for num in range(1, 100, 2): print(num)
3. استفاده از Unpacking برای دسترسی سریع به مقادیر خاص
با استفاده از Unpacking میتوانید مقادیر خاصی از تابع Range در پایتون را سریع بگیرید.
start, *middle, end = range(5) print(start, end) # 0 4
4. ایجاد دنباله معکوس با reversed()
به جای نوشتن step منفی دستی، میتوانید از reversed() برای خوانایی بیشتر استفاده کنید.
for num in reversed(range(1, 6)): print(num)
5. ترکیب Range با توابع کتابخانه itertools
برای کارهای پیشرفتهتر مثل اتصال چند بازه یا ایجاد حلقه بیپایان، از ابزارهای itertools استفاده کنید.
from itertools import chain for num in chain(range(1, 4), range(7, 10)): print(num)
6. برشزدن (Slicing) روی Range بدون تبدیل به لیست
میتوانید روی خروجی تابع Range در پایتون عملیات برش (Slice) انجام دهید و همچنان از مزیت کممصرف بودن آن بهره ببرید.
nums = range(0, 20, 2) print(nums[2:6]) # range(4, 12, 2) print(list(nums[2:6])) # [4, 6, 8, 10]
خطاهای رایج و رفع آنها
در کار با تابع Range در پایتون ممکن است با خطاهایی مواجه شوید که معمولاً به دلیل اشتباه در مقداردهی پارامترها یا نوع دادهها رخ میدهند. در ادامه برخی از این خطاها و روش رفع آنها را بررسی میکنیم.
1. استفاده از نوع داده نامعتبر
تابع Range در پایتون فقط از اعداد صحیح پشتیبانی میکند و اگر از مقادیر اعشاری یا رشته استفاده کنید، خطا رخ میدهد.
range(1.5, 5) # خطا
پیام خطا:
TypeError: 'float' object cannot be interpreted as an integer
راهحل:
برای استفاده از مقادیر اعشاری، از numpy.arange() یا حلقههای دستی استفاده کنید.
import numpy as np print(list(np.arange(1.5, 5, 0.5)))
2. فراموش کردن پارامتر stop
وقتی فقط یک پارامتر بدهید، همان stop در نظر گرفته میشود و اگر مقدارش کمتر از مقدار پیشفرض start باشد، خروجی خالی خواهد بود.
print(list(range(0))) # []
راهحل:
بررسی کنید که مقدار stop بزرگتر از start باشد (برای step مثبت).
3. استفاده نادرست از step منفی
وقتی از step منفی استفاده میکنید ولی مقدار start کوچکتر از stop است، دنباله خالی تولید میشود.
print(list(range(1, 5, -1))) # []
راهحل:
برای step منفی باید مقدار start بزرگتر از stop باشد.
print(list(range(5, 1, -1))) # [5, 4, 3, 2]
4. تلاش برای تغییر مقدار خروجی Range
خروجی تابع Range در پایتون یک شیء immutable است، بنابراین نمیتوان مقادیر آن را مستقیماً تغییر داد.
nums = range(5) nums[0] = 10 # خطا
پیام خطا:
TypeError: 'range' object does not support item assignment
راهحل:
اگر نیاز به تغییر دارید، ابتدا آن را به لیست تبدیل کنید.
nums = list(range(5)) nums[0] = 10
5. مشکل حافظه در تبدیل Range بزرگ به لیست
اگر یک بازه بسیار بزرگ را به لیست تبدیل کنید، ممکن است حافظه سیستم پر شود.
big_list = list(range(1_000_000_000)) # احتمال خطای MemoryError
راهحل:
مستقیماً از شیء Range استفاده کنید و از تبدیل غیرضروری به لیست خودداری کنید.
کاربردهای واقعی در پروژهها
تابع Range در پایتون فقط برای آموزش یا مثالهای ساده نیست، بلکه در پروژههای واقعی و برنامههای بزرگ هم کاربردهای زیادی دارد. این تابع به دلیل سادگی، سرعت بالا و مصرف کم حافظه، یکی از ابزارهای اصلی در بسیاری از سناریوهای برنامهنویسی محسوب میشود.همچنین در دنیای امروز، یادگیری مهارتهای مربوط به دادهکاوی و تحلیل اطلاعات اهمیت زیادی دارد؛ برای یادگیری میتوانید ار آموزش های یادگیری علم داده شروع کنید.. در ادامه چند نمونه کاربرد واقعی را بررسی میکنیم:
. تولید ID یا شمارهگذاری خودکار
در سیستمهایی که نیاز به شمارهگذاری متوالی دارید (مثل شماره سفارشها یا ردیفهای جدول)، تابع Range در پایتون بهترین گزینه است.
order_ids = list(range(1000, 1010)) print(order_ids) # [1000, 1001, 1002, ..., 1009]
. پیمایش دادهها در حلقهها
در پردازش مجموعههای داده بزرگ، اغلب لازم است بر اساس تعداد مشخصی از رکوردها، حلقه ایجاد کنیم.
data = ["Ali", "Sara", "Reza"]
for i in range(len(data)):
print(f"{i+1}. {data[i]}")
. ایجاد داده آزمایشی (Test Data)
برای تست عملکرد یک برنامه میتوانید به راحتی مجموعهای از دادههای نمونه ایجاد کنید.
test_numbers = list(range(1, 101)) # ایجاد اعداد 1 تا 100
. مدیریت زمانبندی و تاخیرها
در پروژههایی که نیاز به تکرار عملیات در فواصل زمانی مشخص دارند، تابع Range در پایتون همراه با time.sleep() کاربرد زیادی دارد.
import time
for _ in range(5):
print("در حال پردازش...")
time.sleep(1) # توقف 1 ثانیهای
. تقسیم داده به دستههای کوچک (Batch Processing)
در پروژههای بزرگ، دادهها معمولاً به دستههای کوچک تقسیم میشوند تا پردازش آسانتر شود.
data = list(range(1, 21))
batch_size = 5
for i in range(0, len(data), batch_size):
batch = data[i:i+batch_size]
print("Batch:", batch)
تولید دنبالههای خاص در پروژههای علمی
در محاسبات علمی و مهندسی، ممکن است نیاز به ایجاد بازههایی با الگوهای خاص داشته باشید.
# تولید اعداد زوج بین 0 تا 20 even_numbers = list(range(0, 21, 2))
یکی از پروژههای عملی جذاب برای یادگیری برنامهنویسی، ساخت ماشین حساب با پایتون است که میتواند مهارتهای شما را در کدنویسی به صورت کاربردی افزایش دهد
جمعبندی
تابع Range در پایتون یکی از ابزارهای قدرتمند و بهینه برای تولید دنبالههای عددی است که با سه پارامتر اصلی (start, stop, step) میتوان آن را به صورت دلخواه تنظیم کرد. این تابع به دلیل استفاده از ساختار دادهای سبک و تولید اعداد به صورت lazy، مصرف حافظه کمی دارد و برای حلقهها و پردازش دادهها بسیار کاربردی است.
در عین حال، توجه داشته باشید که تابع Range در پایتون فقط از اعداد صحیح پشتیبانی میکند و برای دنبالههای اعشاری باید از روشهای جایگزین مثل numpy.arange() استفاده شود.
با دانستن سینتکس، کاربردها، ترفندهای بهینهسازی و رفع خطاهای رایج، میتوانید از این تابع به بهترین شکل در پروژههای خود بهره ببرید و کدهایی سریع، خوانا و کمحجم بنویسید.
اکنون که بر محاسبات توان در پایتون تسلط پیدا کردهاید، وقت آن است که مهارتهای ریاضی خود را به سطح بالاتری ببرید.
برای دریافت مشاوره و اطلاعات بیشتر، با ما تماس بگیرید۰۹۹۰۵۵۰۱۹۹۸
سوالات متداول
1-تفاوت اصلی بین range() و xrange() در پایتون چیست؟
- range() یک لیست کامل میساخت و در حافظه ذخیره میکرد.
- xrange() به صورت lazy (تنبل) عددها را تولید میکرد و حافظه کمتری مصرف میکرد.
در پایتون ۳ فقط range() هست که مثل xrange() پایتون ۲ عمل میکند.
2-آیا میتوان از اعداد اعشاری در range() استفاده کرد؟
خیر، range() فقط با اعداد صحیح کار میکند و استفاده از اعداد اعشاری باعث خطا میشود. برای اعداد اعشاری باید از numpy.arange() یا حلقههای دستی استفاده کنید.
لیست دروس دوره
دوره های پایتون


