Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #19727

Re: Question about name scope

Date 2012-02-01 12:36 -0500
From Dave Angel <d@davea.name>
Subject Re: Question about name scope
References <20120201181117.5d35dddc@bigfoot.com>
Newsgroups comp.lang.python
Message-ID <mailman.5311.1328117874.27778.python-list@python.org> (permalink)

Show all headers | View raw


On 02/01/2012 12:11 PM, Olive wrote:
> I am learning python and maybe this is obvious but I have not been able
> to see a solution. What I would like to do is to be able to execute a
> function within the namespace I would have obtained with  from<module>
> import *
>
> For example if I write:
>
> def f(a):
> 	return sin(a)+cos(a)
>
> I could then do:
>
> from math import *
>
> f(5)
>
> But I have polluted my global namespace with all what's defined in
> math. I would like to be able to do something like "from math import *"
> at the f level alone.
>
> The main reason for this is the sympy module for CAS (computer algebra).
> It reimplement a lot of functions and define all the letters as symbolic
> variables. Writing sympy.<function>  everywhere is inconvenient.
> Importing all the symbols in the global namespace would lead to name
> clash. It would be nice if I could import all the sympy names but for a
> given function only.
>
> Olive
>
>
Start by specifying python version and operating system.

I tried your experiment using Python 2.7 and Linux 11.04


def f(a):
     from math import sin, cos
     return sin(a) + cos(a)

print f(45)

Does what you needed, and neatly.  The only name added to the global 
namspace is f, of type function.

I was a bit surprised that using   from math import * inside the 
function worked, but it generates  a warning:
olive.py:2: SyntaxWarning: import * only allowed at module level
   def f(a):

I normally avoid any use of the "from XX import *" form, as it pollutes 
the global name space.  The only exception is when a library writer 
documents that this is the "normal" way to interface to it.  In this 
case, he usually defines just a few things that are visible this way)

What I do is put a single import math at the top of my source file, and 
use math.sin, and math.cos where needed.  Occasionally, I'll use 
something like:

      from math import sin,cos

at the top, so I know just which symbols I'm defining.

How about:

import math

def f(a):
     sin = math.sin
     cos = math.cos
     return sin(a) + cos(a)

print f(45)

This lets you explicitly use the sin and cos names inside the function, 
by defining them at entry to the function.






-- 

DaveA

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Question about name scope Olive <diolu@bigfoot.com> - 2012-02-01 18:11 +0100
  Re: Question about name scope Rick Johnson <rantingrickjohnson@gmail.com> - 2012-02-01 09:21 -0800
  Re: Question about name scope Ethan Furman <ethan@stoneleaf.us> - 2012-02-01 09:43 -0800
  Re: Question about name scope Dave Angel <d@davea.name> - 2012-02-01 12:36 -0500
    Re: Question about name scope Mel Wilson <mwilson@the-wire.com> - 2012-02-01 13:47 -0500
      Re: Question about name scope Ian Kelly <ian.g.kelly@gmail.com> - 2012-02-01 14:49 -0700
      Re: Question about name scope Ian Kelly <ian.g.kelly@gmail.com> - 2012-02-01 15:38 -0700
      Re: Question about name scope Ethan Furman <ethan@stoneleaf.us> - 2012-02-01 14:24 -0800
      Re: Question about name scope Ian Kelly <ian.g.kelly@gmail.com> - 2012-02-01 16:00 -0700
      Re: Question about name scope Ethan Furman <ethan@stoneleaf.us> - 2012-02-01 15:08 -0800
      Re: Question about name scope Ian Kelly <ian.g.kelly@gmail.com> - 2012-02-01 16:47 -0700
      Re: Question about name scope Ethan Furman <ethan@stoneleaf.us> - 2012-02-01 14:53 -0800
        Re: Question about name scope Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-02-02 00:34 +0000
      Re: Question about name scope Ethan Furman <ethan@stoneleaf.us> - 2012-02-01 15:59 -0800
      Re: Question about name scope Ethan Furman <ethan@stoneleaf.us> - 2012-02-01 15:41 -0800
      Re: Question about name scope Ethan Furman <ethan@stoneleaf.us> - 2012-02-01 15:51 -0800
  Re: Question about name scope Chris Rebert <clp2@rebertia.com> - 2012-02-01 09:38 -0800
  Re: Question about name scope Christian Heimes <lists@cheimes.de> - 2012-02-01 18:50 +0100

csiph-web