On 18/12/2017 06:11, Ivan Pozdeev via Python-ideas wrote: > On 17.12.2017 22:20, Serhiy Storchaka wrote: >> Currently repr of doesn't contain much of information besides that it >> is a lambda. >> >> >>> lambda x: x**2 >> <function <lambda> at 0x7f3479b74488> >> >> All lambdas have the same repr, different only by unreadable >> hexadecimal address. >> >> What if include the signature and the expression of the lambda in its >> repr? >> >> >>> lambda x: x**2 >> <lambda x: x**2> >> > It's the same for named functions: > > In [1]: def ditto(a): return a > > In [2]: ditto > Out[2]: <function __main__.ditto> > > Are you intending to do the same for them? >> This would return an old feature of Python 0.9.1 >> (https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftwitter.com%2Fdabeaz%2Fstatus%2F934835068043956224&data=02%7C01%7C%7C44a37122957d43015aa308d545de3321%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636491742990321352&sdata=iAE6MDdsZJDHfUqlHlPjnf2XV%2BiRZ%2BrP%2FL%2BIQ8kKoKo%3D&reserved=0). >> >> >> >> Repr of function could contain just the signature. >> >> <function foo(bar, baz)> >> >> But there is a problem with default values. Their reprs can be very >> long, especially in the following case with mutable default value: >> >> def foo(x, _cache={}): >> try: >> return _cache[x] >> except KeyError: >> pass >> _cache[x] = y = expensive_calculation(x) >> return y >> >> Maybe the placeholder should be always used instead of default values. >> >> _______________________________________________
Isn't this exactly the sort of information already available via inspect.getardspec, inspect.getsourcelines & inspect.getsource? In [19]: import inspect In [20]: l = lambda x: x**2 In [21]: inspect.getargspec(l) Out[21]: ArgSpec(args=['x'], varargs=None, keywords=None, defaults=None) In [22]: inspect.getsource(l) Out[22]: u'l = lambda x: x**2\n' In [23]: ...: def foo(x, _cache={}): ...: try: ...: return _cache[x] ...: except KeyError: ...: pass ...: _cache[x] = y = expensive_calculation(x) ...: return y ...: In [24]: inspect.getargspec(foo) Out[24]: ArgSpec(args=['x', '_cache'], varargs=None, keywords=None, defaults=({},)) In [25]: inspect.getsource(foo) Out[25]: u'def foo(x, _cache={}):\n try:\n return _cache[x]\n except KeyError:\n pass\n _cache[x] = y = expensive_calculation(x)\n return y \n' In [26]: inspect.getsourcelines(foo) Out[26]: ([u'def foo(x, _cache={}):\n', u' try:\n', u' return _cache[x]\n', u' except KeyError:\n', u' pass\n', u' _cache[x] = y = expensive_calculation(x)\n', u' return y \n'], 2) -- Steve (Gadget) Barnes Any opinions in this message are my personal opinions and do not reflect those of my employer. --- This email has been checked for viruses by AVG. http://www.avg.com _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/