on "Namespaces"
Ben Finney
ben+python at benfinney.id.au
Tue Nov 10 17:45:59 EST 2009
Steven D'Aprano <steven at REMOVE.THIS.cybersource.com.au> writes:
> Modules are namespaces. So are packages.
>
> Classes and class instances are namespaces.
>
> Even function scopes are namespaces.
Steven implies it with his wording, but to make it explicit:
When you have a module, package, class, or instance-of-a-class object,
those objects are themselves namespaces. That is, the name used to refer
to the object can be a component in a namespace reference::
import foo_package
import bar_module
class Parrot(object):
widget = object()
parrot = Parrot()
# Use a package as a namespace.
foo_package.spam_module.frobnicate()
# Use a module as a namespace.
bar_module.spangulate()
# Use a class as a namespace.
print Parrot.widget
# Use an arbitrary instance as a namespace.
parrot.state = "Restin'"
When you have a function object, the “function scope” is not available
in this way: you can't access the “inside” of the function from the
outside via the function object. (The function object, like any other
object, has a namespace, but that's not the *function scope* namespace.)
> When you write:
>
>
> n = None
>
> def spam(n):
> print "spam" * n
>
> def ham(n):
> print "ham" * n
>
> the n inside spam() and ham() and the global n are in different
> namespaces, and so independent.
Right. And neither of them is available from outside those functions
(since the reference only exists while the function is executing).
--
\ “Roll dice!” “Why?” “Shut up! I don't need your fucking |
`\ *input*, I need you to roll dice!” —Luke Crane, demonstrating |
_o__) his refined approach to play testing, 2009 |
Ben Finney
More information about the Python-list
mailing list