我该如何创建Python模块?

时间:2014-08-07 13:04:44

标签: python

我有一个我想要的数学和物理课程。我已经决定不将所有内容放在一个文件中,而应将其分成几个文件。后来我才知道这样做是为了创建一个模块。我浏览了网络,所有的教程都很混乱。我想知道如何创建一个模块及其背后的所有基本技术细节。我也对术语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

2 个答案:

答案 0 :(得分:1)

来自Python documentation about Modules

  

模块是包含Python定义和语句的文件。该   文件名是附加后缀.py的模块名称。

要使用这两项功能创建模块,您必须将功能fibfib2移至名为fibo.py的文件。

然后,您必须创建第二个脚本以将此新模块与import fibo一起使用:

import fibo

fibo.fib(1000)

确保Python可以找到该模块。来自Python documentation about The Module Search Path

  

当导入名为spam的模块时,解释器首先进行搜索   对于具有该名称的内置模块。如果没有找到,则搜索   对于由。给出的目录列表中名为spam.py的文件   变量sys.pathsys.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。