|
|
|
|
移动端

2.4.2 模块(1)

《自学Python:编程基础、科学计算及数据分析》第2章Python 基础,在本章中,我们将学习Python 语言的基本使用,掌握Python 的基本使用方法,为后续的学习打下基础。本节为大家介绍模块。

作者:李金来源:机械工业出版社|2018-05-03 20:48

人工智能+区块链的发展趋势及应用调研报告


2.4.2 模块(1)

1.模块简介

退出 IPython解释器重新启动时,之前定义的函数和变量都会丢失。如果要写一个稍微长一点的程序,使用解释器就不是那么方便,这就需要使用脚本模式进行处理。

在使用脚本模式时,随着代码量的增多,我们可能需要将一个文件切分成多个,以便管理和维护。在多个文件中使用一些公共的函数和变量时,我们不希望在每个文件里都复制粘贴一份定义。Python提供了模块机制来完成这种功能。

使用模块机制需要将公用的函数和变量放到一个文件中,然后从别的脚本或者解释器模式中导入这个文件中的内容。这个包含 Python函数和定义的文件就是一个模块(Module)。通过模块,我们可以复用现成的代码,减少工作量。

在 Python中,所有以.py结尾的文件都可以被当作一个模块使用。

例如,有这样一个文件ex1.py:

  1. PI = 3.1416  
  2. def my_sum(lst):  
  3.     tot = lst[0]  
  4.     for value in lst[1:]:  
  5.  
  6.    tottot = tot + value  
  7.     return tot   
  8.  
  9. w = [0, 1, 2, 3]   
  10. print my_sum(w), PI 

在 Ipython解释器中,可以使用魔术命令%%writefile来创建这个文件:

  1. In [1]: % %writefile ex1.py   
  2.    ...: PI = 3.1416  
  3.    ...: def my_sum(lst):  
  4.    ...:     tot = lst[0]  
  5.    ...:     for value in lst[1:]:   
  6.  
  7.    ...:     tottot = tot + value  
  8.    ...:     return tot  
  9.    ...: w = [0, 1, 2, 3]  
  10.    ...: print my_sum(w), PI   
  11.    ...: 

如果直接使用魔术命令%run来运行这个脚本,会输出结果:

  1. In [2]: %run ex1.py   
  2. 6 3.1416 

这个脚本可以被当作一个模块,导入到解释器或者其他脚本中。

在 Python中,导入模块使用关键字import:

  1. import <module> 

<module>是不带.py后缀的文件名,即:

  1. In [3]: import ex1   
  2. 6 3.1416 

ex1是一个被导入的模块:

  1. In [4]: ex1   
  2. <module 'ex1' from 'ex1.py'> 

在导入时,Python会执行一遍模块中的所有内容,所以 ex1.py文件中 print的结果被输出了。

导入模块之后,ex1.py中的变量都被载入了当前命名环境中,不过,我们需要使用“<module>.<variable>”的形式来调用它们:

  1. In [5]: ex1.PI, ex1.w  
  2. Out[5]: (3.1416, [0, 1, 2, 3]) 

变量可以被修改:

  1. In [6]: ex1.PI = 3.14 

可以用“<module>.<function>”的形式调用模块里面的函数:

  1. In [7]: ex1.my_sum([2, 3, 4])   
  2. Out[7]: 9 

为了提高效率,在同一个程序中,已经载入的模块再次载入时,Python并不会真正执行载入操作,即使模块的内容已经改变。

例如,再次导入模块时,程序ex1.py的结果不会再次输出:

  1. In [8]: import ex1 

在导入模块时,Python会对 ex1.py文件进行一次编译,得到以.pyc结尾的文件ex1.pyc,这是Python生成的二进制程序表示。

2. __name__变量

我们在导入模块时,有时候不希望执行脚本中的某些语句,如 ex1.py中的 print语句等,这种效果可以借由__name__变量来实现。

__name__变量在 Python文件作为脚本执行或者作为模块导入时的值有一定的差异。作为脚本执行时,变量__name__对应的值是字符串'__main__';而作为模块导入时,变量 __name__对应的值是模块的名称。因此,可以在 ex1.py中的 print语句前面加上对__name__变量的判断语句,得到文件 ex2.py:

  1. PI = 3.1416  
  2. def my_sum(lst):  
  3.     tot = lst[0]  
  4.     for value in lst[1:]:  
  5.  
  6.    tottot = tot + value  
  7.     return tot   
  8.  
  9. if __name__ == '__main__':  
  10.     w = [0, 1, 2, 3]  
  11.     print my_sum(w), PI 

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

XML基础教程

本书分为8章。第1章主要对XML做了简单的介绍。第2章详细讲解规范的XML文件。第3章主要讲解有效的XML文件,特别重点讲解DTD文件。第4章讲解C...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊