1

在我正在查看的某些代码中,有以下语句:

from math import exp, sqrt, ceil 

但是,项目文件夹中没有名为 math 的文件夹,也没有名为 exp、sqrt 和 ceil 的模块。我的问题基本上是这些模块是从哪里导入的,我如何查看它们和其他类似的文件?提前致谢。

4

5 回答 5

1

你有一些混淆的术语。在这种情况下,math是模块,exp, sqrt, ceil是它定义的函数。通常是from <module> import <function/class>math是一个基本模块,它包含在每个 Python 安装中。Python 有一组特定的位置来查找模块。在这种情况下,math将是一个用 C 编写的动态加载模块。

您可以通过以下方式找出它的来源:

import math
math.__file__

但是请注意,这将对解释器中内置的任何内容产生错误。

于 2012-08-09T03:48:45.560 回答
0

您正在导入一个标准 Python 模块。有关数学模块的文档,请参见此处,对于完整的标准库,请参见此处。

文件系统上模块的位置因环境而异。不要费心试图在那里找到东西。只需为文档添加书签。

于 2012-08-09T03:47:20.870 回答
0

您看到的是Python 标准库。它们是通过在PYTHONPATH中搜索匹配的模块来解决的。除了 PYTHONPATH,您还可以从包含名为的文件的 python 脚本的任何子文件夹导入__init__.py

于 2012-08-09T03:47:28.740 回答
0

math模块是 Python 标准库的一部分,在任何 Python 安装中始终可用。但是,由于这些函数不是内置函数,因此确实需要导入它们。

于 2012-08-09T03:47:46.310 回答
0

当导入名为 spam 的模块时,解释器首先搜索具有该名称的内置模块。如果没有找到,它会在变量 sys.path 给出的目录列表中搜索名为 spam.py 的文件。sys.path 从这些位置初始化:

- The directory containing the input script (or the current directory).
- PYTHONPATH (a list of directory names, with the same syntax as the shell variable PATH).
- the installation-dependent default.

初始化后,Python 程序可以修改 sys.path。包含正在运行的脚本的目录位于搜索路径的开头,位于标准库路径之前。这意味着将加载该目录中的脚本,而不是库目录中的同名模块。除非打算更换,否则这是一个错误。有关详细信息,请参阅标准模块部分。

在 shell 中,您可以键入以下内容以获取默认的 sys.path

            >>> import sys
            >>> print sys.path
            ['', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/local/lib/python2.6/dist-packages']
于 2012-08-09T03:53:20.410 回答