Python's sum, minus ugly annotations and extra arguments.
Project description
better-sum
Python's sum, minus ugly annotations and extra arguments.
Project goals
Quickstart
- Create a virtual environment with Python 3.9+
pip install better-sum- Try the code below
from __future__ import annotations # Allows forward references on Python < 3.11
from typing import NamedTuple
from better_sum import sum, sum_starts_at_instance
@sum_starts_at_instance(0.0, 0.0) # 1. Create & store a default instance
class Vec2(NamedTuple):
x: float = 0.0
y: float = 0.0
def __add__(self, other: tuple[float, float]) -> Vec2:
other_x, other_y = other
return self.__class__(self.x + other_x, self.y + other_y)
def __radd__(self, other: tuple[float, float]) -> Vec2:
other_x, other_y = other
return self.__class__(other_x + self.x, other_y + self.y)
# 2. better_sum.sum automatically starts at the default instance
to_sum = [Vec2(0.0, 0.0), Vec2(1.0, 1.0), Vec2(2.0, 2.0)]
print(sum(to_sum))
As expected, this will print:
Vec(x=3.0, y=3.0)
Learn more in the usage documentation.
What's wrong with Python's sum?
It complicates code.
# The bad: verbose calls
sum(iterable, start_value)
# The ugly: gross type annotations
class SupportsSum:
# int is ugly
def __radd__(self, other: int | SupportsSum):
if other == 0:
return self
...
What's the catch?
A potential speed hit from indirection.
If it's a concern, then one of two things is true:
- You should be using binary-backed acceleration
- You're writing code for one of the following:
- pyglet or another pure-Python project
- fallback code for when binary acceleration isn't available
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file better_sum-0.1.0.tar.gz.
File metadata
- Download URL: better_sum-0.1.0.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62380eb61603e3bf0366aacd7859836202b4a655e567104003d5867191dcc10d
|
|
| MD5 |
3a3c4ead3c0ecc249405d1841eddee7b
|
|
| BLAKE2b-256 |
19c1be094f9862dd72c93ce87ae90844fd811d1f467594d3e122563b76dca0eb
|
File details
Details for the file better_sum-0.1.0-py3-none-any.whl.
File metadata
- Download URL: better_sum-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
800a8dae06b7fb5ead78fa44220e7a4d951e30760724ddd7efe277387d7b0c75
|
|
| MD5 |
1b76f180190abe84ffb77c7781312741
|
|
| BLAKE2b-256 |
e8fae077e51be27dcf8dc950dba9e1aecb554708baeb03dc1453fd925ef668cb
|