آموزش

آموزش تابع ()range در پایتون

با کمک مثال‌ها، با تابع ()range در پایتون و قابلیت‌های مختلف اون آشنا شو.

تاریخ انتشار:
2 شهریور 1405
پایتون
7 دقیقه
کاربرهای فینکا در چه شرکت‌هایی مشغول به کار هستند؟

تابع range() یکی از توابع خیلی محبوب و پرکاربرد در پایتون به حساب میاد، مخصوصاً وقتی که داری با حلقه‌های for و گاهی هم while کار می‌کنی. یادگیری و تسلط روی تابع range() واقعا ارزشش رو داره چون دستت رو برای خیلی کارها باز می‌کنه: از کنترل جریان برنامه گرفته تا گشتن در دیتاست‌هایی که برای تحلیل داده استفاده می‌کنی، همه‌جا از range() استفاده می‌شه. 

اگه تازه کار با پایتون رو شروع کردی و می‌خوای بیشتر یاد بگیری، می‌تونی دوره مقدمه‌‌ای بر علوم داده در پایتون فینکا رو بگذرونی.

تابع ()range در پایتون چیه؟

تابع range() یه دنباله از اعداد رو برمی‌گردونه و تغییرناپذیر (immutable) هست؛ یعنی مقدارش ثابته. این تابع بین یک تا نهایتاً سه تا آرگومان می‌گیره که شامل مقدارهای start (شروع)، stop (پایان) و همین‌طور اندازه گام یا همون step می‌شه.

تابع range() در پایتون نسخه ۳ معرفی شد. در پایتون نسخه ۲ از تابع مشابهی به اسم xrange() استفاده می‌شد که رفتارش یکم فرق داشت. یکی از تفاوت‌هاش این بود که xrange() یه شیء مولد (generator) برمی‌گردوند و حافظه کمتری مصرف می‌کرد، در حالی که range() یه لیست (list) یا دنباله‌ای از اعداد رو بهمون می‌ده.

یکی از دلایلی که تابع range() رو خیلی مفید می‌کنه اینه که فقط مقادیر start، stop و step رو در خودش ذخیره می‌کنه؛ در نتیجه نسبت به یه لیست یا تاپل (tuple) حافظه خیلی کمتری می‌گیره.

سینتکس تابع ()range در پایتون

تابع range() می‌تونه به سه شکل مختلف نوشته بشه، یا می‌تونی به عنوان سه تا پارامتر مختلف بهش نگاه کنی:

  • range(stop_value): در این حالت، نقطه شروع به طور پیش‌فرض صفره.
  • range(start_value, stop_value): این حالت، دنباله رو بر اساس نقطه شروع و پایان می‌سازه.
  • range(start_value, stop_value, step_size): این حالت دنباله رو از نقطه شروع می‌سازه و در هر مرحله به اندازه گام (step_size) بهش اضافه می‌کنه تا در نهایت به مقدار پایان برسه.

علاوه بر این، با گذاشتن range() داخل تابع type()، می‌تونیم نوعش رو هم بررسی کنیم.

مثال‌هایی از تابع ()range در پایتون

حالا بیا چند تا مثال رو با هم بررسی کنیم تا بتونی کار با range() رو تمرین کنی و کامل روش مسلط بشی.

استفاده از ()range در پایتون برای چاپ یه دنباله از اعداد

بیا با یه مثال ساده برای چاپ یه دنباله ده عددی شروع کنیم که همون پارامتر اول range() رو نشون می‌ده. برای این کار فقط کافیه مقدار stop رو بهش بدی. از اونجایی که پایتون اندیس‌ها رو از صفر شروع می‌کنه، دنباله هم از صفر شروع می‌شه و در عدد n-1 متوقف می‌شه (که n همون عددیه که به تابع range() دادی).

همون‌طور که انتظار می‌رفت، کد بالا یه دنباله از اعداد رو بهمون می‌ده که از ۰ شروع می‌شه و به ۹ ختم می‌شه.

استفاده از ()range در پایتون در کنار ()list

همین‌طور می‌تونی تابع range رو به عنوان یه ورودی (آرگومان) به یه لیست پاس بدی. در این حالت، همون‌طور که این پایین می‌بینی، خروجی یه لیست از اعداد می‌شه که طولش برابر با همون مقدار stop هست:

خروجی
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
10

استفاده از شروع، پایان و گام در تابع ()range پایتون

در ادامه، بیا یه روش دیگه برای کار با تابع range() رو بررسی کنیم. اینجا باید هم مقدار شروع و هم پایان رو خودت مشخص کنی.

خروجی
range(5, 10)
خروجی
5
6
7
8
9

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

خروجی
-5
-4
-3
-2
-1

حالا بیا پارامتر سوم یعنی اندازه (گام) رو هم به تابع range() اضافه کنیم و ببینیم چه تأثیری روی خروجی می‌ذاره. نقطه شروع رو ۵۰، مقدار پایان رو ۱۰۰۰ و اندازه گام رو ۱۰۰ در نظر بگیر. تابع range در کد پایین باید یه دنباله بسازه که از ۵۰ شروع می‌شه و ۱۰۰ تا ۱۰۰ تا می‌ره جلو.

خروجی
range(50, 1000, 100)

می‌بینی که این کد دقیقاً همه این اعداد زوج رو برات چاپ می‌کنه.

خروجی
50
150
250
350
450
550
650
750
850
950

نکته مهم درباره ()range در پایتون و اعداد اعشاری

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

خروجی
TypeError: 'float' object cannot be interpreted as an integer

احتمالاً تا حالا حداقل یه بار موقع برعکس کردن یه لیست پیوندی از اعداد در زبان C حسابی گیج شدی. اما در پایتون، می‌تونی این کار رو خیلی راحت با تابع range() انجام بدی؛ فقط کافیه جای شروع و پایان رو عوض کنی و یه گام منفی بهش بدی. خیلی ساده‌ست، نه؟ بیا با هم امتحانش کنیم!

خروجی
100
90
80
70
60
50
40
30
20

پیدا کردن جمع عناصر یه لیست با استفاده از ()range

فرض کن یه لیست از اعداد صحیح داری و می‌خوای جمع کل اعضاش رو با کمک تابع range() حساب کنی. بیا ببینیم چطور می‌شه این کار رو کرد.

اول باید یه لیست از اعداد تعریف کنی. بعد یه متغیر به عنوان شمارنده می‌سازی و مقدار اولیه‌اش رو صفر می‌ذاری. این‌طوری هر بار که روی لیست حرکت می‌کنی، مقدار فعلی لیست با مقدار قبلی شمارنده جمع می‌شه و در همون شمارنده ذخیره می‌شه.

برای دسترسی به آیتم‌های لیست هم، تابع range() رو روی طول لیست اعمال می‌کنی و با استفاده از اندیس i که از صفر شروع می‌شه و تا آخر لیست می‌ره، آیتم‌ها رو می‌خونی.

خروجی
2
6
12
20
30
42
56
72
90
110
sum of the list: 110

وصل کردن چند لیست به هم با استفاده از ()range و itertools

در پایتون می‌تونی دو یا چند تا تابع range() رو با استفاده از کلاسی به اسم chain از پکیج itertools به هم وصل کنی. تازه این کار فقط مخصوص تابع range نیست؛ می‌تونی لیست‌ها، تاپل‌ها و چیزای دیگه رو هم به همین روش به هم بچسبونی. فقط یادت باشه که متد chain یه شیء مولد بهت می‌ده. برای این که به عناصر این شیء دسترسی داشته باشی، می‌تونی از یه حلقه for استفاده کنی یا اینکه مستقیماً شیء مولد رو بفرستی داخل تابع list() تا برات تبدیلش کنه.

خروجی
<itertools.chain object at 0xae6330>
خروجی
[10, 8, 6, 4, 2, 30, 28, 26, 24, 22, 50, 48, 46, 44, 42]

مقایسه برابری در تابع ()range در پایتون

می‌تونی توابع range() رو با هم مقایسه کنی ببینی برابرن یا نه. اگه دو تا تابع range() دقیقاً یه دنباله یکسان از اعداد رو بسازن، با هم برابر در نظر گرفته می‌شن. جالب اینجاست که برای برابر بودن، اصلاً لزومی نداره مقادیر شروع، پایان و گام در هر دو تابع دقیقاً یکی باشه. بیا با یه مثال این قضیه رو بهتر درک کنیم.

خروجی
True
خروجی
False

همون‌طور که در خروجی‌های بالا می‌بینی، با اینکه پارامترهای توابع range() با هم فرق دارن، ولی چون دنباله‌ای که می‌سازن یکیه، با هم برابر در نظر گرفته می‌شن. اما در مثال دوم، چون اندازه گام فرق کرده، خروجی‌ها دیگه یکی نیستن و نتیجه مقایسه False می‌شه.

نتیجه‌گیری

تبریک می‌گیم که این آموزش رو تا آخر خوندی! حالا وقتشه که یکم بیشتر با تابع range() دست‌وپنجه نرم کنی و ببینی می‌تونی راهی پیدا کنی که به جز اعداد صحیح، انواع داده‌های دیگه رو هم قبول کنه یا نه.

اگه بعد از خوندن این مطلب حس می‌کنی هنوز به تمرین بیشتری روی توابع پایتون نیاز داری، حتماً یه سر به آموزش‌های توابع در پایتون و مقدمه‌ای بر حلقه‌ها در پایتون برای مبتدی‌ها فینکا بزن. برای اینکه یه مسیر یادگیری اصولی و ساختاریافته داشته باشی، پیشنهاد می‌کنیم دوره نوشتن کد بهینه در پایتون فینکا رو هم بررسی کنی. این دوره نه‌تنها تابع range() رو با تمام جزئیاتش بررسی می‌کنه، بلکه بهت کمک می‌کنه مفاهیم عمیق‌تر کدنویسی رو یاد بگیری و بتونی کدهای خیلی بهینه‌ای بنویسی که سربار (overhead) زیادی نداشته باشن.

اشتراک‌گذاری
فهرست مطالب
  • تابع ()range در پایتون چیه؟
  • سینتکس تابع ()range در پایتون
  • مثال‌هایی از تابع ()range در پایتون
  • نتیجه‌گیری

دریافت اپلیکیشن فینکا

با اپلیکیشن فینکا، به بیشتر دوره‌ها و مسیرها روی موبایل دسترسی دارید، تمرین می‌کنید و یادگیری رو هم‌زمان روی موبایل و دسکتاپ ادامه می‌دید.