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
better_sum-0.1.0.tar.gz
(5.2 kB
view details)
Built Distribution
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 |