我有一个带有我自己的函数的.py文件,我在几台机器上运行ipython。问题是在某些平台上我可以调用sin(),size(),plot()这样的函数而不需要父类名的前缀,而在其他平台上我需要编写完整路径:numpy.sin(),ndarray .size(),pyplot.plot()。 1)确定何时使用完整路径以及何时可以使用短格式的规则是什么? 2)我可以手动将函数设置为其简短形式吗?
答案 0 :(得分:1)
看一下import
语句的定义。有两种形式:
import math
math.sin(1)
第二种形式是:
from math import sin
sin(1)
请注意,由于模块也是对象,您还可以在第一种情况下将math.sin
存储在局部变量中:
import math
sin = math.sin
sin(1)
答案 1 :(得分:1)
调用从其他模块导入的函数的方式取决于您的导入方式。
如果你这样做
import numpy
然后你像这样调用numpy模块的sin
函数:
numpy.sin()
如果你厌倦了一直输入“numpy”,你可以这样做:
import numpy as np
np.sin()
你可以做
from numpy import sin, cos
sin()
cos()
但是这会使用导入的名称来填充您的命名空间。
你甚至可以做
from numpy import *
但是该格式非常不鼓励,因为它将所有 numpy名称转储到您的命名空间中。如果你使用多个模块进行这样的“星级”导入,那么如果有任何重复的名称,则后面的导入将破坏先前导入的名称。有关此主题的各种意见,请参阅Why is “import *” bad?。
我的偏好是在我的代码中使用完整的模块名称,而不是经常在我的代码中提及,并使用短名称(如我的第二个例子中所示)来更频繁地使用。 from modulename import thing
形式在短脚本中很方便,但在大型程序中它变得难以处理,特别是如果您从多个模块以这种方式导入事物。
请注意,您始终可以通过简单的赋值语句将函数分配给短名称
s = numpy.sin
这对于在函数内部进行局部引用非常有用,因为查找这样的引用比查找全局引用更快。
答案 2 :(得分:0)
基本上有管理https://docs.python.org/3/reference/import.html
中所述的import语句的规则然而,在这种特定情况下,如果没有看到代码,我猜想使用from something import somethingelse
导入将导入函数,以便它们在没有显式模块调用的情况下可用。
你也可以from something import *
导入所有功能。