On 2017-10-09, John Black <jbl...@nopam.com> wrote: > I want to make sure I understand what this line is doing: > >> oldprint = print > > Experimenting, I find this is not a rename because I can use both > function names.
Right it's not _changing_ a name. It's _adding_ a name. > It looks it literally copies the function "print" to > another function called "oldprint". No, it binds a new name of 'oldprint' to the function to which 'print' is bound. It does not create a second function, nor does it remove the binding of the name 'print' to that function. It just adds a second name that's also bound to that function. > But now, I have a way to modify the builtin funciton "print" by > referencing oldprint. Without oldprint, I have no way to directly > modify print? Well... you can still access the builtin print via the module that contains it: >>> def print(*args, **kw): ... __builtins__.print(*args, sep='', **kw) ... >>> print(1,2,3) However, anytime you find yourself using double underscore stuff you should think to yourself "I should find a better way to do that." > def print(*args, **kw): > print(*args, sep='', **kw) > > meaning print calls print (itself) with sep=''. But this failed and I > guess the reason is that it would keep calling itself recursively adding > sep='' each time? Yep. Just define a new function with a new name: def myprint(*args, **kw): print(*args, sep='', **kw) Redefining builtins is just going get you sworn at down the road a bit. If not by yourself, then by somebody else... -- Grant Edwards grant.b.edwards Yow! Used staples are good at with SOY SAUCE! gmail.com -- https://mail.python.org/mailman/listinfo/python-list