همه‌چیز درباره تابع range در پایتون: از مفاهیم پایه تا ترفندهای حرفه‌ای

بفرست برای دوستت
Telegram
WhatsApp
کاربرد 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 در پایتون چیست؟

تابع Range در پایتون یک تابع داخلی (Built-in Function) است که برای ایجاد دنباله‌ای از اعداد صحیح استفاده می‌شود. این تابع معمولاً در حلقه‌های for یا ساختارهای تکرار به کار می‌رود تا به‌جای نوشتن دستی مقادیر، بتوانیم یک بازه عددی مشخص را به‌طور خودکار تولید کنیم. خروجی تابع Range در پایتون یک شیء از نوع range است که می‌تواند به لیست یا تاپل تبدیل شود و بسته به مقادیر ورودی، شروع، پایان و گام حرکت اعداد را تعیین می‌کند.

به‌طور کلی، این تابع سه پارامتر دارد:

  1. start – عدد شروع (اختیاری، پیش‌فرض صفر)
  2. stop – عدد پایان (الزامی)
  3. step – فاصله بین اعداد (اختیاری، پیش‌فرض ۱)

برای مثال:

for i in range(1, 6):

    print(i)

خروجی:

1 

2 

3 

4 

5

 

اکنون که بر محاسبات توان در پایتون تسلط پیدا کرده‌اید، وقت آن است که مهارت‌های ریاضی خود را به سطح بالاتری ببرید.

برای دریافت مشاوره و اطلاعات بیشتر، با ما تماس بگیرید۰۹۹۰۵۵۰۱۹۹۸

سینتکس تابع Range در پایتون چگونه است؟

سینتکس تابع Range در پایتون چگونه است؟

سینتکس کلی تابع Range در پایتون به شکل زیر است:

range(start, stop, step)

این ساختار سه پارامتر دارد که هر کدام نقش مشخصی ایفا می‌کنند:

  1. start (شروع)
    • عددی که دنباله از آن آغاز می‌شود.
    • مقدار پیش‌فرض آن 0 است.
    • اگر این مقدار را تعیین نکنید، پایتون به صورت خودکار از صفر شروع می‌کند.
  2. stop (پایان)
    • عددی که دنباله پیش از رسیدن به آن متوقف می‌شود.
    • این پارامتر اجباری است.
    • توجه کنید که عدد stop شامل بازه نمی‌شود. به عنوان مثال، در range(1, 5) اعداد 1 تا 4 تولید می‌شوند، نه 5.
  3. 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 با یک پارامتر در پایتون

زمانی که تابع 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 در پایتون

تابع 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 با لیست در پایتون

می‌توان خروجی تابع 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 در پایتون

خطاهای رایج و رفع آن‌ها

در کار با تابع 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() یا حلقه‌های دستی استفاده کنید.

 

لیست دروس دوره

مسیر یادگیری هوش مصنوعی

اگر سوالی در مورد این درس دارید، در کادر زیر بنویسید.

0 نظرات
قدیمی‌ترین
تازه‌ترین بیشترین رأی
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها