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

Reply via email to