repr = expression representation?
Christian Gollwitzer
auriocus at gmx.de
Fri May 17 02:57:50 EDT 2019
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
print(repr(test))
-> 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.
Christian
More information about the Python-list
mailing list