Erik Max Francis wrote:
Chris Angelico wrote:
On Fri, Jun 17, 2011 at 10:48 AM, Steven D'Aprano
<steve+comp.lang.pyt...@pearwood.info> wrote:
Perhaps the most sensible alternative is conditional importing:
# === module extras.py ===
def ham(): pass
def cheese(): pass
def salad(): pass
# === module other.py ===
def spam(): pass
if not some_condition: from extras import *
This would, if I understand imports correctly, have ham() operate in
one namespace and spam() in another. Depending on what's being done,
that could be quite harmless, or it could be annoying (no sharing
module-level constants, etc).
No, he's using `from ... import *`. It dumps it all in the same
namespace
Wrong, with a little bit right. The 'from ... *' functions are now
bound in the calling namespace, but they still execute in their original
namespace. Observe:
8<--these.py---------------------------------------------------------
import this
this.yummy()
8<--this.py----------------------------------------------------------
breakfast = 'ham and eggs'
def spam():
print(breakfast)
if 'spam' not in breakfast:
from that import *
8<--that.py----------------------------------------------------------
def yummy():
print(breakfast)
8<--results----------------------------------------------------------
--> import these
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "these.py", line 3, in <module>
this.yummy()
File "that.py", line 2, in yummy
print(breakfast)
NameError: global name 'breakfast' is not defined
8<-------------------------------------------------------------------
~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list