关于Python的模块

来源:互联网 发布:淘宝客服工作总结1 编辑:程序博客网 时间:2024/06/06 03:53

Python的模块主要是用于把定义的类,函数等保存到一个文件里,以便复用。

先看看怎么声明和使用一个模块:

下面定义了Fibonacci数列的函数,在fib.py文件中。

# Fibonacci numbers moduledef fib(n):    # write Fibonacci series up to n    a, b = 0, 1    while b < n:        print b,        a, b = b, a+bdef 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

在需要调用fib, fib2函数的地方,import上面那个脚本文件,然后就可以调用其中的函数了:

>>> import fib>>> fib.fib2(10)[1, 1, 2, 3, 5, 8]>>> fib.__name__'fib'

Python是如何搜索一个Module对应的脚本文件的

在上面import语句部分,我们只给出了模块名称,并没有提供脚本文件的路径,那么Python是怎么找到这个文件呢?

Python在处理import语句给出的模块名时,首先在内置的模块中寻找;

如果该模块不是Python自带的内置模块,就在sys.path指定的一系列路径下寻找:

  • 当前路径,比如在linux下,把fib.py保存到home目录,而在home目录执行python,就可以成功地import fib模块;
  • PYTHONPATH环境变量;

Python脚本可以在程序中修改sys.path路径。

举个例子(设置PYTHONPATH环境变量)

travis@travis-ubuntu1310:/usr$ export PYTHONPATH=/home/travistravis@travis-ubuntu1310:/usr$ travis@travis-ubuntu1310:/usr$ pythonPython 2.7.5+ (default, Sep 19 2013, 13:48:49) [GCC 4.8.1] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import fib>>> fib.fib2(10)[1, 1, 2, 3, 5, 8]>>> 

为啥在可执行Python脚本文件中要加 if __name__ == "__main__":

在Python的模块中,除了包含函数定义等等之外,还可以包含可执行语句,这些语句一般是为了初始化模块用的,并只在首次被import时执行。但它们也能在模块作为脚本文件运行时候执行。显然,我们需要区分这两种情况,这时就需要__name__判断语句。

先在fib.py中加入一行打印语句:

print ‘Executing fib.py’

再次import(或者reload)这个模块时,这句话就被执行,比如:

>>> import fibExecuting fib.py>>> 

现在编辑fib.py文件,改为如下形式:

# Fibonacci numbers moduledef fib(n):    # write Fibonacci series up to n    a, b = 0, 1    while b < n:        print b,        a, b = b, a+bdef 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 resultif __name__ == '__main__':    print 'Executing fib.py'

这时import fib或者(reload(fib)),print 语句就不会执行。

而运行脚本就可以看到print语句执行:

travis@travis-ubuntu1310:/usr$ python ~/fib.pyExecuting fib.py











0 0
原创粉丝点击