On 11/16/2016 12:36 AM, Steven D'Aprano wrote:
But, for what its worth...I have a function, let's call it quartile(data, n). Unfortunately there's about a dozen different ways to calculate quartiles, and they all give ever-so- slightly different results. So I end up with: def quartile(data, n, scheme="Method 7"): ... which lets the caller choose the specific calculation method they want to use, or just use the default. *My* default, chosen by me, which may or may not be convenient. And then there's a bunch of other functions which depend on quartile(). I don't have to list them, but there's at least two and may be more. They too will have an optional parameter to choose a calculation method. And *that* almost rules out your factory function idea: having to call a factory to create multiple functions is too confusing for a library API. quartile, iqr, blah blah blah = library.make_functions() So while I'd consider that under some circumstances, I don't like it here. I'd like the caller to be able to set their own default, if they don't like mine, in the easiest way possible. That means a global. DEFAULT_SCHEME = "Method 7" # Late binding of the default, instead of early binding. def quartile(data, n, scheme=None): if scheme is None: scheme = DEFAULT_SCHEME ... Say they want to match the same calculation method that Excel uses, they can just modify the library.DEFAULT_SCHEME and forget all about it. But that's globally global, and I actually want it to only be global to their own module. Hence my question.
I think you stuck with the same solution Decimal uses: a context that you can either set globally global, or one that can be used as a context manager. -- ~Ethan~ -- https://mail.python.org/mailman/listinfo/python-list
