On 13 October 2016 at 12:54, Nick Coghlan <ncogh...@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 | ncogh...@gmail.com | Brisbane, Australia _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com