On 1/28/07, Chris Rebert email@example.com wrote:
As pointed out by Calvin Spealman in an earlier email:
Calvin Spealman wrote:
Deep copy of the originally created default argument can be expensive and would not work in any useful way with non-literals as defaults, such as function calls or subscript lookups or even simple attributes.
first, please refer to my second version (@copydefaults).
second, theoretically all objects are copyable, as long as they define __copy__ or __deepcopy__. it's up to you.
third, you'll use this decorator only when you want "fresh copies" of the default values... not "just for fun", and since you'll need these fresh copies anyhow, creating the value by hand ("if x is None: x = ") will not yield a dramatic performance gain, as most default objects are "primitive" anyway (empty lists and stuff, not dicts of 10000 keys)
the main issue is readability and auto-documentation. using "def f(x = )" is better documenting than "def f(x = None)"
and fourth, my apologies, but such a decorator already existed (and even with the same semantics that i used): http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/303440