在某些代码中,我看到的是以下声明:
from math import exp, sqrt, ceil
但是项目文件夹中没有名为math的文件夹,也没有名为exp,sqrt和ceil的模块。我的问题基本上是从哪里导入这些模块,我如何看待它们和其他类似的文件?提前谢谢。
答案 0 :(得分:1)
你有一些混淆的术语。在这种情况下,math
是模块,exp, sqrt, ceil
是它定义的函数。通常是from <module> import <function/class>
。 math
是每个Python安装都包含的基本模块。 Python有一组特定的位置,它将寻找模块。在这种情况下,math
将是用C编写的动态加载模块。
您可以通过以下方式找到它的来源:
import math
math.__file__
请注意,这会对内置于解释器中的任何内容产生错误。
答案 1 :(得分:0)
答案 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']