Ensure unwanted names removed in class definition
rosuav at gmail.com
Wed Aug 12 11:14:30 CEST 2015
On Wed, Aug 12, 2015 at 7:01 PM, Ben Finney <ben+python at benfinney.id.au> wrote:
> class Parrot:
> """ A parrot with beautiful plumage. """
> plumage = [
> (foo, bar) for (foo, bar) in feathers.items()
> if bar == "beautiful"]
> del foo, bar # ← FAILS, “NameError: name 'foo' is not defined”
> How can I write the class definition with the list comprehension and
> *not* keep the incidental names — in code that will run correctly on
> both Python 2 and Python 3?
You could always do explicitly what a Py3 comprehension does, and wrap
it in a function:
plumage = (lambda: [
(foo, bar) for (foo, bar) in feathers.items()
if bar == "beautiful"])()
Hardly clean code, but it will work, and apart from having a redundant
layer of protection in Py3, will do exactly the same thing on both. Is
the lambda nesting cruft worth it?
More information about the Python-list