导入someModule,而不是clr.AddReferenceToFile(“someModule”)?

2024-10-05 14:24:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个python初学者(python 2.7和ironpython2.7),而不是程序员。 有时,我发现一个代码的开头是这样的:

import clr
clr.AddReferenceToFile("nameOfmodule")
from nameOfmodule import someMethod

这有什么意义? 我们就不能用:

from nameOfmodule import someMethod

是吗?

我试着用谷歌搜索,但还没有真正理解其中的原因。

谢谢你的回复。

编辑:“fromnameofmoduleimportsomemethod”和“import nameOfmodule.someMethod”之间没有混淆。我编辑了代码,所以现在更有意义了。


Tags: 代码fromimport编辑原因程序员意义初学者
3条回答

在第二个例子中,当您想要调用方法时,仍然必须使用nameOfmodule.someMethod(...),在第一个例子中,您只需要someMethod(…)。如果你用import nameOfmodule.someMethod as sm那就更有意义了。

如果您喜欢键入,或者在代码中的某个地方定义了另一个someMethod,请使用第二个示例。

使用os.path的示例:

In [3]: import os.path     
In [4]: os.path.abspath(".")
Out[4]: '/home/foo'    
In [5]: from os import path
In [6]: path.abspath(".")
Out[6]: '/home/foo'    
In [7]: import os.path as op   
In [8]: op.abspath(".")
Out[8]: '/home/foo'

只有在使用Ironpython时,clr才相关:

The import statement in Python is more analogous to a using statement in C#. you still need to load the relevant .dll assembly. C# does this at compile-time by using references; IronPython by default includes standard CLR references, which is why it is immediately possible to import System.Xml

However, if you want to load a .dll that is not included by default in IronPython, you must use clr.AddReference("myAssembly.dll") and then use the import statement to import the module.

有一篇博文here更详细

你在用IronPython和.NET吗?如果是这样,那么第一个示例中的代码需要在IronPython中添加一个.NET程序集作为引用,以便Python可以导入它。

否则你不需要这么做,from nameOfmodule import someMethod就可以了。

注意,第二个示例中的代码对于在标准Python模块中导入函数是不正确的。您可以:

>>> import nameOfmodule
>>> result = nameOfmodule.someMethod()

或者

>>> from nameOfmodlue import someMethod
>>> result = someMethod()

但下面会给您一个错误:

>>> import nameOfmodule.someMethod
ImportError: No module named someMethod

对于最新版本的Python for.NET,您不需要使用import clrAddReferenceToFile,但它仍然适用于向后兼容,因此您正在研究的示例可能仍然使用它,因此它们适用于更多的人。

对于最新版本,可以将CLR程序集视为普通的Python模块:

from nameOfModule import someMethod

clr是由Microsoft的.NET框架提供的公共语言运行库。因此,在您的示例中,脚本使用clr,这样它就可以引用用C#或Visual Basic编写的组件,并将其制作成一个库,以便与其他组件一起使用。

http://pythonnet.github.io/有更多信息。

相关问题 更多 >