我有一个我想要的数学和物理课程。我已经决定不将所有内容放在一个文件中,而应将其分成几个文件。后来我才知道这样做是为了创建一个模块。我浏览了网络,所有的教程都很混乱。我想知道如何创建一个模块及其背后的所有基本技术细节。我也对术语python路径感到困惑。当我查找有关创建模块的教程时,它看起来像这样:
# Fibonacci numbers module
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
import fibo
答案 0 :(得分:1)
来自Python documentation about Modules:
模块是包含Python定义和语句的文件。该 文件名是附加后缀
.py
的模块名称。
要使用这两项功能创建模块,您必须将功能fib
和fib2
移至名为fibo.py
的文件。
然后,您必须创建第二个脚本以将此新模块与import fibo
一起使用:
import fibo
fibo.fib(1000)
确保Python可以找到该模块。来自Python documentation about The Module Search Path:
当导入名为spam的模块时,解释器首先进行搜索 对于具有该名称的内置模块。如果没有找到,则搜索 对于由。给出的目录列表中名为spam.py的文件 变量
sys.path
。sys.path
已从以下位置初始化:
- 包含输入脚本(或当前目录)的目录。
PYTHONPATH
(目录名列表,语法与shell变量PATH
相同)。- 依赖于安装的默认值。
初始化后,Python程序可以修改
sys.path
。该 包含正在运行的脚本的目录放在开头 搜索路径的位置,在标准库路径之前。这意味着 将加载该目录中的脚本而不是模块 库目录中的名称相同。这是一个错误,除非 打算替换。
如果您对Modules感兴趣,您可能也会对Packages感兴趣。来自Python documentation about Packages:
包是一种使用构造Python模块命名空间的方法 “虚线模块名称”。例如,模块名称
A.B
指定a 名为B
的包中名为A
的子模块。就像使用模块一样 保存不同模块的作者不必担心每个模块 其他的全局变量名称,使用虚线模块名称保存 多模块软件包的作者,如NumPy或Python Imaging 图书馆不必担心彼此的模块名称。
这是创建包的方法:
导入包时,Python会搜索目录
sys.path
正在寻找包子目录。需要
__init__.py
个文件才能让Python对待 目录包含包;这是为了防止 无意中具有通用名称的目录,例如string 隐藏稍后在模块搜索路径上发生的有效模块。在 最简单的情况,__init__.py
可以只是一个空文件,但它可以 还执行包的初始化代码或设置__all__
变量,稍后描述。
答案 1 :(得分:0)
把这个:
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
在一个文件中。如果只想在当前目录中使用它, 把它留在那里。如果你想在任何地方使用它,请把它 在Python的site-packages目录中。
那是......
您可以在文件末尾添加以下内容:
def main():
# Add test code for the library functions here
return 0
if __name__ == '__main__':
main()
这样可以执行&#39;图书馆马上,
跑步,例如。测试其中的例程的代码。如果
它被称为模块(带导入),然后是if
将不致电main()
并且它只是一个图书馆。
就这么简单。 python路径确保Python的位置 看起来,通常在所有网站包dirs。