تابع sum در پایتون یک تابع پیشساخته (built-in) است که مجموع تمام اعداد موجود در یک ایتریبل (iterable) مانند لیست، تاپل یا range را محاسبه و برمیگرداند. این تابع یکی از پرکاربردترین توابع پایتون در پردازش دادههای عددی است.
فهرست مطالب:
سینتکس تابع sum
سینتکس کلی تابع sum به صورت زیر است:
sum(iterable, start=0)
پارامترها یا آرگومانهای این سینتکس عبارتند از:
- آرگومان
iterableمیتواند هر شیء قابل پیمایش مانند لیست، تاپل، رنج، مجموعه یا ژنراتوری که عناصر عددی دارد، باشد. - آرگومان اختیاری
start، یک عدد است و مقدار پیشفرض آن 0 میباشد. مجموع نهایی از این مقدار شروع میشود؛ یعنی start به مجموع عناصر اضافه میگردد.
مقدار بازگشتی تابع sum عددی از نوع int یا float خواهد بود که برابر مجموع تمام عناصر ایتریبل به علاوه مقدار start است.
کاربردهای تابع sum
سادهترین کاربرد این تابع، جمع کردن اعداد یک لیست یا تاپل است:
>>> numbers = [1, 2, 3, 4, 5]
>>> result = sum(numbers)
>>> print(result)
15
اگر بخواهید مجموع از یک عدد مشخص شروع شود، باید از پارامتر start استفاده کنید:
>>> numbers = [1, 2, 3, 4, 5]
>>> result = sum(numbers, 10)
>>> print(result)
25
در این مثال پایتون ابتدا مجموع numbers را که برابر ۱۵ است محاسبه میکند، سپس مقدار start یعنی ۱۰ را به آن اضافه میکند و نتیجه ۲۵ را برمیگرداند.
تابع range یک ایتریبل تولید میکند که sum میتواند آن را پردازش کند:
>>> total = sum(range(1, 101))
>>> print(total)
5050
این تابع از اعداد مختلط هم پشتیبانی میکند:
>>> complex_nums = [1+2j, 3+4j, 5+6j]
>>> print(sum(complex_nums))
(9+12j)
ترکیب تابع پایتونی sum با مفهوم list comprehension یکی از رایجترین الگوهای پایتون برای پردازش دادههاست:
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# مجموع اعداد زوج
>>> even_sum = sum(x for x in numbers if x % 2 == 0)
>>> print(even_sum)
30
# مجموع توان دوم اعداد
>>> square_sum = sum(x ** 2 for x in numbers)
>>> print(square_sum)
385
نکته ۱: تابع sum فقط برای اعداد طراحی شده است. اگر بخواهید استرینگها را به هم متصل کنید، باید از متد join استفاده کنید.
نکته ۲: تابع پایتونی sum روی دیکشنریها به صورت مستقیم عمل نمیکند؛ برای جمع مقادیر دیکشنری d میتوانید از sum(d.values()) استفاده کنید.
مثال واقعی از تابع sum
در کار با دادههای ساختاریافته، ممکن است نیاز داشته باشیم مجموع یک فیلد مشخص را از لیستی از دیکشنریها محاسبه کنیم:
>>> products = [
{"name": "book", "price": 150000},
{"name": "pen", "price": 25000},
{"name": "notebook", "price": 45000},
]
>>> total_price = sum(item["price"] for item in products)
>>> print(total_price)
220000
در این مثال، جمع قیمت اقلام داخل لیست products که مجموعهای از دیکشنریهاست توسط ترکیب مفهوم list comprehension و تابع کاربردی sum محاسبه شده است.
سوالات متداول
-
تفاوت تابع sum و حلقه for در پایتون چیست؟
هر دو نتیجه یکسانی تولید میکنند، اما sum کوتاهتر و خواناتر است. برای لیستهای بزرگ، sum معمولاً عملکرد بهتری دارد زیرا از پیادهسازی بهینهشده داخلی پایتون استفاده میکند.
-
آیا میتوان از sum برای جمع لیستهای تودرتو استفاده کرد؟
به صورت مستقیم خیر. اما میتوانید با ترکیب sum و list comprehension ابتدا لیست را صاف کرده، سپس جمع بزنید (به مثالهای بالا برگردید).
-
آیا تابع sum از اعداد منفی و مختلط هم پشتیبانی میکند؟
بله، تابع sum اعداد منفی و مختلط را مانند هر عدد دیگری پردازش میکند.
-
چه زمانی از پارامتر start استفاده کنیم؟
وقتی میخواهید مجموع از یک مقدار پایه شروع شود؛ برای مثال در انباشت تدریجی نتایج در حلقهها یا وقتی میخواهید یک offset ثابت به مجموع اضافه کنید.
-
تفاوت sum با math.fsum چیست؟
تابع math.fsum برای اعداد اعشاری دقت بیشتری دارد و خطای گرد کردن (floating point error) را کاهش میدهد. برای محاسبات علمی یا مالی حساس، تابع fsum از ماژول math انتخاب بهتری است.
جهت کسب اطلاعات بیشتر میتوانید به مستندات رسمی پایتون برای تابع sum مراجعه کنید.