1, 什么是模块?

  模块就是一系列功能的集合体

  模块分为四个通用的类别:

    1), 使用python编写的.py文件(*****)

    2), 已被编译为共享库或DLL的C或C++扩展

    3), 把一系列模块组织到一起的文件夹(注:文件夹下有一个_init_.py文件,该文件夹称之为包)(*****)

    4), 使用C编程并连接到python解释器的内置模块

  模块有三种来源:

    1), 内置模块

    2), 第三方模块

    3), 自定义模块

2,如何使用模块?

  1), 使用内置的或者第三方的模块的好处是:  拿来主义,极大提升开发效率

  2), 使用自定义的模块好处是:  将程序各部分组件共用的功能提取取出放到一个模块里,其他组件通过导入的方式使用该模块,该模块即自定义的模块,好处就是减少代码冗余.

3,首次导入模块会发生三件事

  1), 会产生一个模块的名称空间

  2), 执行spam.py文件的内容,将产生的名字丢到模块的名称空间里

  3), 在当前执行文件中拿到名字read1,该名字指向模块的名称空间中的read1

  

  模块的查找顺序: 内存中已经加载的模块 ==> 内置模块 ==> sys.path路径中包含的模块

import语句:

  想要使用python源文件,只需要在另一个源文件中执行import语句

  当解释器遇到import语句时,如果模块在当前的搜索路径中就会被导入

  搜索路径是一个解释器,会先进行搜索的所有目录的列表,如果要倒用模块,需要将命令放在脚本的顶端

def print_func (par):print('hello :',par)return

support.py文件代码

#test.py引入support模块import support support.print_func('你好')#实例输出结果
hello : 你好

test.py文件代码

  一个模块只会被导入一次,不管你执行了多少次import.这样可以防止导入模块被一遍又一遍地执行.

  (python的搜索路径: 搜索路径是由一系列目录名组成的)

  当我们使用import语句的时候,python解释器就一次从这些目录中去寻找所引入的模块,看起来很像是环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径.

  搜索路径是在python编译或安装的时候确定的,安装新的库应该也会修改.搜索路径被存储在sys模块中的path变量

>>> import sys
>>> sys.path
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
>>> 

  sys.path 输出是一个列表,其中第一项是空串,代表当前目录(若是从一个脚本中打印出来的话,可以更清楚地看出是哪个目录),即是我们执行python解释器的目录(对于脚本的话就是运行的脚本所在的目录)

# 斐波那契(fibonacci) 数列模块def fib(n):     #定义到n的斐波那契数列a, b = 0,1while b < n:print(b, end=' ')a, b = b, a+bprint()def fib2(n):    #返回到n的斐波那契数列result = []a, b = 0, 1while b < n:result.append(b)a, b = b, a+breturn result

斐波那契数列

  进入python解释器,使用import fibo命令导入该模块,

  这样做并没有把直接定义在fibo中的函数名称写入到当前符号表里,只是把模块fibo的名字写到了那里

  可以使用模块名称来访问函数

>>>fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'

  如果经常使用一个函数,可以赋给一个本地的名称:

>>> fib = fibo.fib
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

from ... import语句

  python的from语句从模块中导入一个指定的部分到当前命名空间中,

>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

  这种声明不会把整个fibo模块导入到当前的命名空间中,它只会讲fibo里的fib函数引入进来

from ... import* 语句

  把一个模块的所有内容全部导入到当前命名空间也可以:

        from modnameimport *

  这种方法导入了一个模块中的所有项目,不该过多地使用

python程序员不使用这种方法,因为引入的其他来源的命名,很有可能覆盖了已有的定义.

  import总结:

    优点:指名道姓地问某一个名称空间要名字,不会与当前执行文件名称空间中的名字冲突

    缺点:引用模块中的名字必须加前缀(模块名),使用不够简洁

  from...import总结:

    优点: 引用模块中的名字不用加前缀(模块名),使用更为简洁

    缺点: 容易与当前执行文件名称空间中的名字冲突

_name_ 属性  (py文件的两种用处)

  一个模块被另一个程序第一次引入时,其住程序将运行,如果我们想在模块被引入时,模块中的某一程序块不执行,可以用_name_属性来使该程序块仅在该模块自身运行时执行

if __name__ == '__main__':print('程序自身在运行')
else:print('我来自另一模块')#运行如下
$ python using_name.py
程序自身在运行$ python
>>> import using_name
我来自另一模块

说明:  

  每个模块都有一个_name_属性,当其值是'_main_'时,表明该模块自身在运行,否则是被引入

  

  当文件被当作执行文件执行时_name_的值为_main_

  当文件被当作模块导入时_name_ 的值为模块名

转载于:https://www.cnblogs.com/kp1995/p/10066885.html

模块(import语句,from...import语句,_name_属性)相关推荐

  1. java源文件构造中package语句必须在import语句后面,在一个Java源程序中,如果import语句、package语句、class语句都存在,则出现的次序应为_____。...

    在一个Java源程序中,如果import语句.package语句.class语句都存在,则出现的次序应为_____. 答:package语句.import语句.class语句 和平统一,一国两制的基本 ...

  2. python基础--自定义模块、import、from......import......

    自定义模块.import.from......import...... 1)模块的定义和分类 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例 ...

  3. ES6模块之export和import详解

    ES6模块之export和import详解 ES6中的模块即使一个包含JS代码的文件,在这个模块中所有的变量都是对其他模块不可见的,除非我们导出它.ES6的模块系统大致分为导出(export)和导入( ...

  4. 在python用import或者from...import来导入相应的模块

    python import的用法 [转自http://blog.sina.com.cn/s/blog_4b5039210100ennq.html] 在python用import或者from...imp ...

  5. [ 转]Python模块(二)import和from...import的区别

    Python模块(二)import和from...import的区别 听语音 原创 | 浏览:2975 | 更新:2018-04-02 13:02 | 标签:PYTHON 1 2 3 4 5 6 7 ...

  6. [Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题

    http://www.cnblogs.com/mizhon/p/4242073.html [Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题 最近想 ...

  7. import 和from... import的作用,导入模块or导入函数

    import 与 from-import 在 python 用 import 或者 from...import 来导入相应的模块.将整个模块(somemodule)导入,格式为: import som ...

  8. 7.PL_SQL——在PL_SQL程序中内嵌查询语句、DML语句、事物处理语句和游标属性

    在PL/SQL中可以使用的SQL语句主要有以下几类: SELECT 查询语句,DML语句,Transaction 事物处理语句以及游标的属性,本文将对这几类语句在PL/SQL中的用法逐一介绍. 一.查 ...

  9. from . import_python首行代码import *,from * import * 解析

    python代码,一般第一行代码都是import *或from * import *,作用是导入功能模块,然后利用模块内的函数编写代码,减少大量的代码编写时间,是python的一大特色.但是,在实际写 ...

最新文章

  1. 小酌重构系列[8]——提取接口
  2. 大体了解Android应用安装过程及原理
  3. Sql Server编程
  4. 【极值问题】【CF1063B】 Labyrinth
  5. struts.xml配置文件(二)
  6. Zygote和System进程的启动过程
  7. 华为机试题【9】-整数分割为2的幂次
  8. cookie和session常见问题
  9. linux 编译 连接失败,编译linux-3.15.5时遇到的几个错误
  10. 数据库复习 库 表 记录的 增删改查 基础
  11. 警告:Vista存高风险 不宜过早安装
  12. 如何使用初始化列表消除冗余C++代码
  13. 概率论与计算机的关系小论文,概率论与数理统计论文
  14. sql order by 用法
  15. 制作Ubuntu系统的USB启动盘
  16. 【经验分享】Thinkpad(系列均可) E50左Ctrl键失灵问题解决方法
  17. 计算机房的正常温度和湿度,各类机房的温湿度标准参考
  18. CAD设置图层透明显示
  19. Linux学习笔记(七)创建文件
  20. Hadoop学习(七)---namenode结点的详细讲解

热门文章

  1. springcloud学习笔记一
  2. make m mm mmm 的区别
  3. 2021年中国钛材行业现状、进出口现状、竞争情况及未来发展趋势分析,我国钛材产量大幅提升「图」
  4. 用JavaScript实现动态获取当前时间并刷新
  5. 2015年大数据基金闪耀 海富通、泰达宏利2016竞风流
  6. 微型计算机原理小闹钟8253,微机原理课程设计-电子钟的设计.doc
  7. Redis Key的层级格式
  8. Arduino实现工控上急停与复位的方法
  9. 计算机毕业设计 SSM税务信息管理系统 缴税信息管理系统 税务申报管理系统
  10. 台式中端计算机配置单,电脑主机中端配置清单