On Thu, 17 Nov 2016 16:17:51 +1100, Steven D'Aprano wrote:
> ... factory functions are great. But I'm saying that as the writer of
> the library, not the user of the library. Can you imagine expecting
> users to do this?
> from math import trig
> sin = trig.build('sine')
> result = sin(0.1)
No, but I could expect users to do this:
import math # trig functions take radians by default
math = math.degree_math # but I like degrees
Or to choose from one of these:
import math # trig functions take radians by default
import math.degree_math as math # but I like degrees
Or to choose from one of these:
import math.radian_math as math # use the radians version
import math.degree_math as math # use the degrees version
The complexity is taken on once, by the library author, who (presumably)
understands the complexity better than the users do.
> It might only be one extra line of code, but conceptually it is an
> order of magnitude more complex. The user has to comprehend factory
> functions and first-class functions as values before they can even
> begin to understand this.
It is only one line of code, but only the library author has to deal
with the rest of that.
> The internal details of how the implementation works is not important
> to the user ...
On that we all agree. :-)
> ... They only need to understand that the "scheme" parameter takes its
> value from the first found of:
>
> - an explicit argument
> - a global variable called "WHATEVER"
> - the library default
>
> which is pretty simple to understand and use.
Hey, wait a minute: you've slipped another option into the mix because
you originally wanted a separate "global" setting for each module that
imports your library. With a global global rather than a module global,
you might get something like this:
import library # default is HAMMIFY
library.default = library.SPAMMIFY # but I like SPAMMIFY instead
(At which point, I see your point about wanting the library to reach
"out" to some sort of global space rather than the user reaching "in" to
the library space after the fact.)
--
https://mail.python.org/mailman/listinfo/python-list