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,1
while b < n:
print(b, end=' ')
a, b = b, a+b
print() def fib2(n): #返回到n的斐波那契数列
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return 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_ 的值为模块名

模块(import语句,from...import语句,_name_属性)的更多相关文章

  1. Python模块_import语句_from...import 函数名_from ... import *

    Python模块:包含了所有定义的函数和变量的文件,后缀名为 .py 将某些方法存放在文件中,当某些脚本 或 交互式需要使用的时候,导入进去. 导入的文件,就称为模块.导入之后就可以使用导入的文件的函 ...

  2. 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途

    目录 模块的四种形式 模块 模块的四种形式 import和from...import 循环导入问题 模拟问题的发生: 解决方案 模块的搜索路径 Python文件的两种用途 模块的四种形式 Nike推荐 ...

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

    自定义模块.import.from......import...... 1)模块的定义和分类 1.模块是什么? 我们知道一个函数封装了一个功能,软件可能是有多个函数组成的.我们说一个函数就是一个功能, ...

  4. python的模块(module)和包(package)机制:import和from..import..

    在python用import或者from...import来导入相应的模块. 模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中 ...

  5. python基础之 025 模块加载与import的使用

    内容梗概: 1. 模块 2. import 3. from xxx import xxx 1.模块定义:模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀.目前写的所有 ...

  6. import 和 from … import 模块的变量、方法引用差异

    import 和 from … import 模块的变量.方法引用差异 还是上面例子中的模块 support.py: def print_func( par ): print "Hello ...

  7. python基础,导入模块,if语句,while语句

    python基础 python代码 变为字节码 变为机器码 最后执行执行‘文件名.py’文件时出现的‘文件名.pyc’文件为字节码 缓存机制 使用pycharm的时候在文件最开始添加下面这两行代码,中 ...

  8. Python Import机制备忘-模块搜索路径(sys.path)、嵌套Import、package Import

    出处:http://blog.csdn.net/kernelspirit/article/details/3381666 最近在看<Python源码剖析>,对Python内部运行机制比以前 ...

  9. Python6_模块、包、import、from import的解释

    先说一下模块和包是什么? 模块(module):简单来说一个模块(module)就是一个py文件.在python中是这么约定. 模块里面有函数.类,就是一组代码的集合.   模块显然要有一个名字,这个 ...

随机推荐

  1. 课程10:《黑马程序员_Hibernate开发资料》视频目录--没有细看

    老师很厉害,讲得蛮详细的 \Hibernate视频教程\01_黑马程序员_Hibernate教程__Hibernate入门基础.avi; \Hibernate视频教程\02_黑马程序员_Hiberna ...

  2. [转载]tmux常用快捷键

    Hello World 窗口管理只是 tmux 功能的一小部分,另一个很有用的功能就是,连接到远程主机之后,一旦断开,那么当前账户登录的任务就被取消了,但是使用 tmux 可以在断开之后继续工作,下次 ...

  3. 3. SpringBoot ——自动配置原理浅析

    SpringBoot的功能之所以强大,离不开它的自动配置这一大特色.但估计很多人只是知其然而不知其所以然.下面本人对自动配置原理做一个分析: 在使用SpringBoot时我们通过引入不同的Starte ...

  4. android Gui系统之SurfaceFlinger(1)---SurfaceFlinger概论【转】

    转自:https://www.cnblogs.com/deman/p/5584198.html 阅读目录 1.OpenGL & OpenGL ES 2.Android的硬件接口HAL 3.An ...

  5. linux系统的三种网络连接模式

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...

  6. ansible笔记(7):常用模块之系统类模块

    ansible笔记():常用模块之系统类模块 cron模块 cron模块可以帮助我们管理远程主机中的计划任务,功能相当于crontab命令. 在了解cron模块的参数之前,先写出一些计划任务的示例,示 ...

  7. zabbix3监控php-fpm的状态

    php-fpm和nginx一样内建了一个状态页,对于想了解php-fpm的状态以及监控php-fpm非常有帮助 . 启用php-fpm状态功能 [root@node1:~]# vim /usr/loc ...

  8. java的小数比较反例

    double num = 0.3; System.out.println(num); System.out.println(num - 0.2); System.out.println(num - 0 ...

  9. javascript for循环 日期 select

    2016年12月28日 20:01:54 星期三 html: <a href="aaaa">AAAA</a> <a href="bbbb&q ...

  10. 解决:Gitlab的developer角色的人没有push权限无法提交(转)

    问题 几位同事合作搞一些东西,打算在Gitlab上建一个仓库,然后协同开发.建好仓库后,将其他几位同事添加进来,角色分配为Developer. 之后提交初始代码到master分支后,他们用source ...