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
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.5.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 694544e2564f8fd5f909142e48d872f56eaadb6ebe3be42c7ac5ae5f7cc88d13 |
|
MD5 | 096b428ff764d0560ce9341acc5b8ba5 |
|
BLAKE2b-256 | 5577e438ce37979e9ceb3c6f148eceb9c92f6d2cc423ccf6accf9dada04deb56 |
Hashes for python_none_objects-1.1.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d204fe7d871753d37a30f74e25d5effefe7539227ddb392049cb9f0dba212d49 |
|
MD5 | 452db46bc537baca7905d37ffb4cbbfa |
|
BLAKE2b-256 | b3fb4693611ffd8e5acc12f72203dbf3d1021b71eb42598085cc737a69702ed0 |