What is more efficient?

1) import math
2) from math import *
3) from math import sin, cos

I prefer to know where functions came from, so I would use the namespace alternative ...

import math

y = math.sin(1) + math.cos(1)

If you use ...

from math import sin, cos

y = sin(1) + cos(1)

... in the hope that only sin and cos are imported, you are wrong. The whole math module is imported, the only efficiency is that you don't have to type the name space ("math."), but you lose the safety of the name space, as there will be conflicts with equally named functions or variables.

If your module name gets longer, you can use this import statement ...

import numpy as np

y = np.sin(1) + np.cos(1)

This would be the worst case ...

from math import *
from numpy import *

y = sin(1) + cos(1)

From which module will Python pick sin() and cos()? Let's say one module is more accurate than the other.

What vegaseat said.

And if you're trying to optimise your program by using the most "efficient" of these, you have issues.

import math

y = math.sin(1) + math.cos(1)

If you use ...

from math import sin, cos

y = sin(1) + cos(1)

... in the hope that only sin and cos are imported, you are wrong. The whole math module is imported

I was about to say that this method might be efficient. Ooh! It have bad pitfalls I will stick with import and import as

This question has already been answered. Start a new discussion instead.