2

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

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

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

from nameOfmodule import someMethod

?

我尝试使用谷歌搜索,但并没有真正理解解释。

感谢您的答复。

编辑:混淆不在“from nameOfmodule import someMethod”和“import nameOfmodule.someMethod”之间。我编辑了代码,现在它更有意义了。

4

3 回答 3

5

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

在最近的版本中,您可以将 CLR 程序集视为普通的 Python 模块:

from nameOfModule import someMethod

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

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

于 2015-02-26T13:36:10.077 回答
1

你在使用 IronPython 和 .NET 吗?如果是这样,第一个示例中的代码需要添加一个 .NET 程序集作为 IronPython 中的引用,以便 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
于 2015-02-26T13:36:26.677 回答
0

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'

clr 仅在您使用时才相关Ironpython

Python 中的 import 语句更类似于 C# 中的 using 语句。您仍然需要加载相关的 .dll 程序集。C# 通过使用引用在编译时执行此操作;IronPython 默认包含标准 CLR 引用,这就是为什么可以立即导入 System.Xml

但是,如果要加载 IronPython 默认不包含的 .dll,则必须使用 clr.AddReference("myAssembly.dll") 然后使用 import 语句导入模块。

有一篇博文在这里更详细

于 2015-02-26T13:33:15.487 回答