Add more constant "None" objects to Python to avoid boilerplate code
Project description
python-none-objects
A collection of "None" objects |
---|
compatible with various Python types |
The following code yields warning for "Default argument value is mutable".
from typing import List, Dict
def foo(some: int, other: List = [], thing: Dict = {}):
for o in other:
bar(some, o, thing)
It is usually recommended to use None instead (https://stackoverflow.com/questions/41686829 /why-does-pycharm-warn-about-mutable-default-arguments- how-can-i-work-around-the):
from typing import List, Dict, Optional
def foo(
some: int,
other: Optional[List] = None,
thing: Optional[Dict] = None,
):
if other is None:
other = []
if thing is None:
thing = {}
for o in other:
bar(some, o, thing)
But I prefer less boilerplate code like this:
from typing import Iterable, Mapping
from types import MappingProxyType
def foo(
some: int,
other: Iterable = (),
thing: Mapping = MappingProxyType({}),
):
for o in other:
bar(some, o, thing)
This package introduces constants to make the code more readable:
from typing import Iterable, Mapping
from python_none_objects import NoneIterable, NoneMapping
def foo(
some: int,
other: Iterable = NoneIterable,
thing: Mapping = NoneMapping,
):
for o in other:
bar(some, o, thing)
Be sure to look at the discussions on GitHub: https://github.com/LLyaudet/python-none-objects/discussions.
There is a poll on the naming convention you would prefer: https://github.com/LLyaudet/python-none-objects/discussions/2.
And there is a discussion on various ideas to optimize the code with these constants: https://github.com/LLyaudet/python-none-objects/discussions/3.
I think it would be better to have this kind of constants in the standard library. If you think after reading everything, that it is indeed a good idea, add a star to this repository to let the rest of the Python community know that you would like to see such constant objects in the language :). https://github.com/LLyaudet/python-none-objects/ If the project gains popularity, I'll try to propose it officially.
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
Hashes for python_none_objects-1.1.10.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2bd6038f035d68b831dd4fecc402ed36b84ce2e8188482ded46b5ecf44c98440 |
|
MD5 | 56da8a3a6bc7e239f6ab5ee9bf2e34a5 |
|
BLAKE2b-256 | e712e8479a7bf41cb94a8a1ca7445e588d7098894d4b5134a7f57491b7580db5 |
Hashes for python_none_objects-1.1.10-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 39897f24ce8aa877445ea2ea9d4bba4e8f2b66455bf89b6cd162d7c672891e62 |
|
MD5 | bc9d26e533ebaf2d01f644a719984929 |
|
BLAKE2b-256 | 2bc346fdbfae6699a473c409a8c346eaffdc0eb134945dd02e42c9f2658831d7 |