Can global variable be passed into Python function?

Marko Rauhamaa marko at pacujo.net
Sun Mar 2 06:33:11 EST 2014


Steven D'Aprano <steve+comp.lang.python at pearwood.info>:

> On Sun, 02 Mar 2014 11:35:43 +0200, Marko Rauhamaa wrote:
>> Now, what kinds of object are those constants? We are not supposed to
>> know or care.
>
> Incorrect. We are supposed to know and care.

Then, the documentation is seriously flawed. It gives no hint whatsoever
on the nature of those objects.

> os.posix is exactly the sort of library I mentioned earlier when I
> said sometimes you're constrained by compatibility with some other
> system. In this case, the os module is explicitly designed to be
> compatible with the POSIX interface, which is defined to use certain
> integer values as flags. This is not an implementation choice which
> implementers can change at will, it is part of the interface.

The values of those Python constants don't need to have any relationship
with those of the underlying operating system.

> Python does not guarantee that there is only a single 1 instance.

Nobody has ever argued such a thing. I certainly haven't.

However, nothing in the API spec gives you the right to call the
function with an integer.

> If you want to test whether a value is os.POSIX_FADV_RANDOM, the right
> way is to compare that value for equality with os.POSIX_FADV_RANDOM,
> not identity.

That might well be true but is not explicitly or implicitly specified in
the documentation. (The os.SEEK_* constants are explicitly defined.)

>> Since, for all I know, os.POSIX_FAVD_RANDOM might return a random value
>> for __eq__().
>
> For all *you* know, perhaps, but since os.posix_fadvise is a thin
> wrapper around the POSIX C function fadvise, and that is documented as
> expecting ints for the advice parameter, that cannot be the case.

A pretty serious documentation flaw, then. Misleading even.

I take it from the documentation that you *must* use the given constant
objects and not some improvised integers.

> That the os module is a thin wrapper around os- specific services may
> not be explicitly stated, but it is nevertheless true.

The example was given for illustration purposes; any criticism against
the accuracy of the documentation is a sideshow.


Marko



More information about the Python-list mailing list