Question about math.pi is mutable
Bartc
bc at freeuk.com
Sat Nov 7 06:57:16 EST 2015
On 07/11/2015 11:35, Ben Finney wrote:
> Bartc <bc at freeuk.com> writes:
>
>> On 07/11/2015 03:43, Ben Finney wrote:
>>> Bartc <bc at freeuk.com> writes:
>>>
>>>> Is there no way then in Python to declare:
>>>>
>>>> pi = 3.141519 # etc
>>>>
>>>> and make it impossible to override?
>>>
>>> No, and it would be a bad thing if that were something a library author
>>> could forbid.
>>>
>>> Python assumes the programmers using it are consenting adults. Doing
>>> harmful things is difficult but not forbidden.
>>
>> But surely it can't hurt to ensure certain values can't be changed
>> accidentally or maliciously?
>
> The value ‘3.141519’ (in your example above) can't be changed. That
> value will always be exactly the same, as long as the program is
> running.
>
> What I think you mean is “surely it can't hurt to ensure certain names
> can never be bound to any value but their initial binding”.
>
> On that I strongly disagree, for the reasons already discussed in this
> thread: it arrogates to the library author the power to forbid patching
> the library, which cripples extending, debugging, introspection, and a
> host of other useful activities.
Why would it stop introspection?
If the source is available, why would it stop anyone extending a library?
To my mind, Python allows far too much freedom in being able to change
anything at any time. Imagine if the interfaces to Win32 API or to the
Linux kernel could be turned upside down from one microsecond to the
next, while programs are still running.
Take a simple function like thousands of others:
def dull(x,y,z);
.....
.....
99.9999% of the time, the name 'dull' is not going to be bound to
anything else, and it would just be called like this:
dull(10,20,30)
Yet Python has to assume 100% of the time that it could have been
changed. Think of the opportunities for optimising if the probability
was 0%.
Perhaps if library authors want people tinkering with their code at
runtime, they should mark it as such ('var', 'volatile' etc). Because
most of us are quite happy with a boring, static library that is not
likely to morph into something else!
--
Bartc
More information about the Python-list
mailing list