模块

  python中的模块

  用过c语言编程的,都知道在c语言中如果要引用sqrt这个函数,必须要用语句 “#include”引入math.h这个头文件,否则是无法正常进行调用的。

  同理,在python中有一个概念叫做模块(module),这个和C语言的头文件以及java中的包很类似,比如在python中要调用sqrt函数,必须要用import关键字引入math这个模块。

  说直接点,模块好比是工具包,要像使用这个工具包中的工具(就好比函数),就需要导入这个模块。

  import

   在python中用关键字import 来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。

   举例: import module1,module2...

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

   当调用math模块中的函数时,必须要这样引用

模块名.函数名

   为什么必须要加上模块这样调用?

    因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器就无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须要加上模块名。

import math

#这样会报错
print sqrt(2)

#这样才能正确输出结果
print math.sqrt(2)

    

    有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以以下方法实现

from  模块名 import 函数名1,函数名2...

    不仅可以引入函数,还可以引入一些变量

    注意:

    通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,当时当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function(),在模块b中也有函数function(),如果引入a中的function在线,b中的function在后,那么当调用function函数的时候,是去执行模块b中的function函数、

    如果想一次性引入math中所有的东西,还可以通过from math import*来实现;但是不建议这样操作。

    

   from...import

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

   语法如下:

from  modname import name1[, name2[,...name]]

   例如,要导入模块fib的fibonacci函数,使用如下语法:

from fib
 import fibonacci

   这个声明不不会把整个fib模块导入到当前的命名空间中,它只会将fib里的fibonacci单个引入

   from....import *

    把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from modname import *

    这样提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该过多的被使用

    定位模块

    当你导入一个模块,python解释器对模块位置的搜索顺序是:

    1.当前目录

    2.如果不在当前目录,python则搜索在shell变量PYTHONPATH的每个目录。

    3.如果都找不到,pytho会查看默认路径。unix系统下,路径一般默认为 /usr/local/lib/python/

    4.模块搜索路径存储在system模块的sys.path变量中,变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

posted @ 2018-10-02 21:15  FlameLuo  阅读(142)  评论(0编辑  收藏  举报