Julien Palard added the comment: Hi Serhiy,
> Julien, you can declare the hi parameter as > hi: Py_ssize_t(py_default="len(a)") = -1 Looks like a good idea, I was aware of its existance but did not took the time to read the doc about it, kind of learning step by stpe. But as you provided the syntax, I tested it, thanks for this! But it fails with a RuntimeError during python -m pydoc _bisect, I'm currently trying to understand why: $ ./python -m pydoc _bisect Traceback (most recent call last): File "/home/mdk/cpython-git/Lib/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/home/mdk/cpython-git/Lib/runpy.py", line 85, in _run_code exec(code, run_globals) File "/home/mdk/cpython-git/Lib/pydoc.py", line 2663, in <module> cli() File "/home/mdk/cpython-git/Lib/pydoc.py", line 2628, in cli help.help(arg) File "/home/mdk/cpython-git/Lib/pydoc.py", line 1908, in help elif request: doc(request, 'Help on %s:', output=self._output) File "/home/mdk/cpython-git/Lib/pydoc.py", line 1645, in doc pager(render_doc(thing, title, forceload)) File "/home/mdk/cpython-git/Lib/pydoc.py", line 1638, in render_doc return title % desc + '\n\n' + renderer.document(object, name) File "/home/mdk/cpython-git/Lib/pydoc.py", line 382, in document if inspect.ismodule(object): return self.docmodule(*args) File "/home/mdk/cpython-git/Lib/pydoc.py", line 1172, in docmodule contents.append(self.document(value, key, name)) File "/home/mdk/cpython-git/Lib/pydoc.py", line 384, in document if inspect.isroutine(object): return self.docroutine(*args) File "/home/mdk/cpython-git/Lib/pydoc.py", line 1357, in docroutine signature = inspect.signature(object) File "/home/mdk/cpython-git/Lib/inspect.py", line 2994, in signature return Signature.from_callable(obj, follow_wrapped=follow_wrapped) File "/home/mdk/cpython-git/Lib/inspect.py", line 2744, in from_callable follow_wrapper_chains=follow_wrapped) File "/home/mdk/cpython-git/Lib/inspect.py", line 2223, in _signature_from_callable skip_bound_arg=skip_bound_arg) File "/home/mdk/cpython-git/Lib/inspect.py", line 2055, in _signature_from_builtin return _signature_fromstr(cls, func, s, skip_bound_arg) File "/home/mdk/cpython-git/Lib/inspect.py", line 2003, in _signature_fromstr p(name, default) File "/home/mdk/cpython-git/Lib/inspect.py", line 1985, in p default_node = RewriteSymbolics().visit(default_node) File "/home/mdk/cpython-git/Lib/ast.py", line 253, in visit return visitor(node) File "/home/mdk/cpython-git/Lib/ast.py", line 317, in generic_visit new_node = self.visit(old_value) File "/home/mdk/cpython-git/Lib/ast.py", line 253, in visit return visitor(node) File "/home/mdk/cpython-git/Lib/inspect.py", line 1977, in visit_Name return wrap_value(node.id) File "/home/mdk/cpython-git/Lib/inspect.py", line 1959, in wrap_value raise RuntimeError() RuntimeError > > Curiously, this patch gives about a 10% to 15% speedup. Any sense of how > > that improvement arises? > This is rather a random difference. Try to run the bench several times. With > using Victor's perf module the difference is not significant. If you search for "perf" in the history of this issue you'll see that I already tested with Victor's perf module and it yielded a consistent 18% improvement on bisect.bisect("abcdef", "c") on two different machines. Clearly with more than 5 items, it will start to fade, and with a lot of items, it's not significand, obviously as it's an optimization about the call and not the implementation. So Raymond's test with 100 items may still see a speedup. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue28754> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com