Tim
Tim

Reputation: 2592

How can I import multiple items from a module and rename them in Python?

I want to import atan and degree from math and rename them both.

I have tried using this:

from math import atan,degree as t,z

But that gives ImportError: cannot import name 'z'.

I did a number of Google searches for "import multiple modules and rename", but all were fruitless. The Python manual hasn't helped - the page on imports doesn't explain this (as far as I can tell).

How can I import multiple items from a module, and rename them?

Upvotes: 29

Views: 25643

Answers (2)

Tim
Tim

Reputation: 2592

You have to use the as for each item:

from math import atan as t, degree as z

This imports and renames them all.

Upvotes: 54

TZHX
TZHX

Reputation: 5397

The Python Reference Manual does, in fact, cover this. It says, in its description for the import statement:

import_stmt     ::=  "import" module ["as" name] ( "," module ["as" name] )*
                     | "from" relative_module "import" identifier ["as" name]
                     ( "," identifier ["as" name] )*
                     | "from" relative_module "import" "(" identifier ["as" name]
                     ( "," identifier ["as" name] )* [","] ")"
                     | "from" module "import" "*"

Now, this notation is a little confusing at first glance, but as spend time with programming languages you will become more familiar with it. It is commonly refered to as "BNF" (which stands for Backus-Naur Form). Most programming language references will use some version of it.

From the sample above, we see the following symbols that could do with some explanation:

  • Vertical bar or Pipe character ( | ) -- this is used to separate alternatives
  • The asterisk / star character ( * ) -- this means that the preceding (usually enclosed statement) is repeated zero or more times
  • Square brackets ([ and ]) -- these indicate that the enclosed portion which occurs is optional, so included zero or one times.
  • Parenthesis (( and )) -- these are used to group statements for the asterisk to take affect on

Cutting down the reference above to what you seem interested in, we have:

"from" relative_module "import" identifier ["as" name]
                     ( "," identifier ["as" name] )*

TL;DR Which, for your example given, leads to the legal statement being

from math import atan as t, degree as z

Upvotes: 11

Related Questions