Access to the caller's globals, not your own
MRAB
python at mrabarnett.plus.com
Thu Nov 17 08:55:43 EST 2016
On 2016-11-17 05:40, Dan Sommers wrote:
> 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.
>
[snip]
I wonder if it would be possible to make modules callable. You would do
this by adding a __call__ function, and this function could be a factory
function:
import math
degree_math = math('degree')
This would be equivalent to:
import math
degree_math = math.__call__('degree')
Also, a possible syntax extension:
import math('degree') as degree_math
This would be equivalent to:
import math as __temp__
degree_math = __temp__.__call__('degree')
del __temp__
If you wrote:
import math('degree')
this would be equivalent to:
import math as __temp__
math = __temp__.__call__('degree')
del __temp__
More information about the Python-list
mailing list