[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

repr = expression representation?

Am 17.05.19 um 06:13 schrieb Stefan Ram:   However, look at this
> |>>> print( str( print ))
> |<built-in function print>
> |>>> print( repr( print ))
> |<built-in function print>
>    . While it is nice that ?str( print )? gives some useful
>    information, I would expect ?repr( print )? to give
>    ?print? - 

This is impossible. Python does not use "call by name", so a function 
cannot know how the argument is called in the upper stack level. Consider:

Apfelkiste:inotes chris$ python3
Python 3.6.1 |Anaconda 4.4.0 (x86_64)| (default, May 11 2017, 13:04:09)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
 >>> blafasel = print
 >>> print(repr(blafasel))
<built-in function print>

You'll have to accept that not all Python objects can be represented as 
literals. While a user defined function /could/ be printed as a lambda, 
so expecting:

def test(x):
	return 2*x


-> lambda x : 2*x

would be half-reasonable, it is impossible to print out the C source 
code of the built-in print function, unless one builds a JIT C compiler 
into Python.