关于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
- 关于Python的模块
- 关于Python的自定义模块
- 关于Python模块,或许是这样的:
- python 关于时间模块的总结1
- 关于Python的time模块常用函数
- 关于python安装scipy模块的问题
- python关于argparse模块的学习内容
- 关于python模块
- 关于正则表达式,关于Python的re模块
- Python中关于模块的 '__name__' 变量的使用
- 关于python struct模块的性能问题-----待学习
- python 关于自定义 模块(类,函数),包的导入
- python中关于时间time模块的知识
- python关于模块导入的几种方法
- 关于使用python logging模块的几点总结
- 关于python中模块的环状引用(circular imports)
- 关于python中inspect模块的一些探究
- 关于python中re模块split方法的使用
- lubunt 自动挂载TF卡作为数据卡
- db_recovery_file_dest参数
- POJ 3322 Bloxorz I 三维BFS
- 约瑟夫问题
- C++连接mysql数据库的两种方法
- 关于Python的模块
- OCP-1Z0-053-200题-204题-255
- 位运算符和位移运算符
- 【Lua】ElJudge 000 Sum of two integers
- linux6及centOS启动时提留在bringing up interface eth0:解决
- 我为自己代言
- OCP-1Z0-053-200题-199题-159
- 【Lua】ElJudge 001 Max of Integers
- 栈