[Python-Dev] Adding bytes.frombuffer() constructor to PEP 467 (was: [Python-ideas] Adding bytes.frombuffer() constructor (original) (raw)
Nick Coghlan ncoghlan at gmail.com
Wed Oct 12 23:31:02 EDT 2016
- Previous message (by thread): [Python-Dev] Adding bytes.frombuffer() constructor to PEP 467 (was: [Python-ideas] Adding bytes.frombuffer() constructor
- Next message (by thread): [Python-Dev] Adding bytes.frombuffer() constructor to PEP 467 (was: [Python-ideas] Adding bytes.frombuffer() constructor
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 13 October 2016 at 12:54, Nick Coghlan <ncoghlan at gmail.com> wrote:
Method proliferation on builtins is a Big Deal(TM)
I wanted to quantify this concept, so here's a quick metric that helps convey how every time we add a new builtin method we're immediately making Python harder to comprehend:
>>> def get_builtin_types():
... import builtins
... return {name:obj for name, obj in vars(builtins).items()
if isinstance(obj, type) and not (name.startswith("") or issubclass(obj, BaseException))} ... >>> len(get_builtin_types()) 26 >>> def get_builtin_methods(): ... return [(name, method_name) for name, obj in get_builtin_types().items() for method_name, method in vars(obj).items() if not method_name.startswith("")] ... >>> len(get_builtin_methods()) 230
Putting special purpose functionality behind an import gate helps to provide a more explicit context of use (in this case, IO buffer manipulation) vs the relatively domain independent namespace that is the builtins.
Cheers, Nick.
P.S. Since I was poking around in the builtins anyway, here are some other simple language complexity metrics:
>>> len(vars(builtins))
151
>>> def get_interpreter_builtins():
... import builtins
... return {name:obj for name, obj in vars(builtins).items()
if name.startswith("")} ... >>> len(get_interpreter_builtins()) 8 >>> def get_builtin_exceptions(): ... import builtins ... return {name:obj for name, obj in vars(builtins).items() if isinstance(obj, type) and issubclass(obj, BaseException)} ... >>> len(get_builtin_exceptions()) 65 >>> def get_builtin_functions(): ... import builtins ... return {name:obj for name, obj in vars(builtins).items() if isinstance(obj, type(repr))} ... >>> len(get_builtin_functions()) 42 >>> def get_other_builtins(): ... import builtins ... return {name:obj for name, obj in vars(builtins).items() if not name.startswith("") and not isinstance(obj, (type, type(repr)))} ... >>> len(get_other_builtins()) 12
The "other" builtins are the builtin constants (None, True, False, Ellipsis, NotImplemented) and various artifacts from doing this at the interactive prompt (license, credits, copyright, quit, exit, help, "_")
-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
- Previous message (by thread): [Python-Dev] Adding bytes.frombuffer() constructor to PEP 467 (was: [Python-ideas] Adding bytes.frombuffer() constructor
- Next message (by thread): [Python-Dev] Adding bytes.frombuffer() constructor to PEP 467 (was: [Python-ideas] Adding bytes.frombuffer() constructor
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]