Re: A missing iterator on itertools module?

Liste des GroupesRevenir à cl python 
Sujet : Re: A missing iterator on itertools module?
De : nntp.mbourne (at) *nospam* spamgourmet.com (Mark Bourne)
Groupes : comp.lang.python
Date : 29. Mar 2024, 12:27:20
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <uu68ip$8tb8$1@dont-email.me>
References : 1 2 3 4
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 SeaMonkey/2.53.18.1
Stefan Ram wrote:
ast <none@none.fr> wrote or quoted:
Why did you renamed itertools as _itertools ?
    Assume I have a module A.py:
 import math
def f(): pass
    . Assume I have an additional module B.py:
 import A
    . Now, when I'm editing "B.py" in IDLE and type "A.", IIRC
   IDLE will offer me two possible completions: "A.math" and
   "A.f". The "A.math" makes no sense to me.
`import math` imports the `math` module and binds it to `math` in the global namespace of the `A` module.  Since it doesn't have a leading underscore, by default it's considered to be a public attribute of the `A` module, and IDLE is offering all the public attributes of the `A` module for completion.

I want it to go
   away. Therefore, I rewrite A.py as:
 import math as _math
def f(): pass
    . Now, Idle will only offer the completion "A.f".
    So, I sometimes use this "import math as _math" style. But then,
   it is simpler for me to /always/ use this style; after all: you
   can't know whether someone eventually will import your module!
You can explicitly declare the public interface of a module by defining `__all__`, listing the names which should be considered part of the module's public interface; see:
- https://docs.python.org/3/reference/simple_stmts.html#the-import-statement
- https://peps.python.org/pep-0008/#public-and-internal-interfaces
Although `from A import *` is generally discouraged, if `A` defines `__all__` then only the names listed in `__all__` are bound in the importing module's namespace.  Otherwise, all names from `A` which don't have a leading underscore are considered to be public and bound in the importing module.
I don't use IDLE, but it may be that it also uses `__all__` to determine a module's public API.  In that case, setting `__all__ = ["f"]` in `A` should prevent it from offering `math` as a completion (nor any other name that's not in the `__all__` list).
--
Mark.

Date Sujet#  Auteur
28 Mar 24 * A missing iterator on itertools module?9ast
28 Mar 24 +- Re: A missing iterator on itertools module?1ast
28 Mar 24 +* Re: A missing iterator on itertools module?5Stefan Ram
28 Mar 24 i`* Re: A missing iterator on itertools module?4ast
28 Mar 24 i `* Re: A missing iterator on itertools module?3Stefan Ram
29 Mar 24 i  +- Re: A missing iterator on itertools module? (Posting On Python-List Prohibited)1Lawrence D'Oliveiro
29 Mar 24 i  `- Re: A missing iterator on itertools module?1Mark Bourne
3 Apr 24 +- Re: A missing iterator on itertools module?1Antoon Pardon
3 Apr 24 `- Re: A missing iterator on itertools module?1<avi.e.gross

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal