python导入语句

时间:2012-08-09 03:43:17

标签: python import

在某些代码中,我看到的是以下声明:

from math import exp, sqrt, ceil 

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

5 个答案:

答案 0 :(得分:1)

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

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

import math
math.__file__

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

答案 1 :(得分:0)

您正在导入标准Python模块。有关数学模块的文档,请参阅here;有关完整标准库,请参阅here

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分: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']