当前位置:首页 > 编程教程 > Python教程 > python导入模块

python导入模块
栏目分类:Python教程发布日期:2020-01-18浏览次数:

导入模块 我们可以直接使用标准库模块,也可以下载第三方库模块,甚至还可以自己写模块,供他人导入使用。 1.命名空间 在python程序中,一个模块包含若干变量和函数,我们可以使用dir()这个函数来查看一个模块里定义过的名字列表。很多时候,python程序中可
导入模块

我们可以直接使用标准库模块,也可以下载第三方库模块,甚至还可以自己写模块,供他人导入使用。

1.命名空间

在python程序中,一个模块包含若干变量和函数,我们可以使用dir()这个函数来查看一个模块里定义过的名字列表。很多时候,python程序中可能会遇到导入的多个不同模块的同名变量或函数,这时,就要靠命名空间来区分他们。

输出结果:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
 
命名空间会把我们编写的python程序里很多的变量和函数自动分配至不同的空间,并通过不同的名称来区分他们,这些不同的命名空间对应了不同的作用域,在导入了不同模块的同名变量时,可以有效地防止他们冲突。比如,在函数内部声明的变量会被划分到局部命名空间,函数外的变量会被划分为全局命名空间,还有既非局部也非全局的命名空间,比如嵌套函数中间的变量,以及关键字的內联命名空间等等。
命名空间本质上是一个字典,它的键是标识符(变量名或函数名),它的值是这些标识符各自相应的对象。我们可以使用locals()函数和globals()函数看看输出的局部命名空间和全局命名空间的字典。



输出结果请亲自实验。        

2.import 语句

在一个模块中导入另一个模块,一般都是在模块开通使用import导入,语法如下:
 
import module1,module2,module3......
 
当使用import导入模块后,python解释器在执行该模块时会在当前所在路径去搜索该模块的位置,然后将其加载至当前模块下。我们在使用该模块的方法时,需要加上“模块名.”才能使用,如math.fabs()。
那么如果一个模块的名字很长,我们在使用该模块的方法时,每次都要加上该模块名,就会很繁琐,所以python为我们提供了as关键字,来简化模块名,然后使用新指定的名字去代替原模块名来调用里面的方法,使用方法如下:

使用as关键字指定的新名字的命名规范仍然要符合标识符命名规则。

3.from...import 语句

from...import语法如下:
 
from modulename import name1,name2...
 
从英文含义就能明白这个语句的作用,即从一个模块中导入一些指定的变量或方法到当前的命名空间,而不像import那样将整个模块导入,所以这样写会使程序开销更小。而且在使用这样的导入模式时,可以直接使用导入的标识符名称,不需要加“模块名.”。
也可以将使用from...import将一个模块的所有内容都导入当前的命名空间:
from modulename import *
同样不需要加“模块名.”
在使用from...import时,虽然可以比import少写“模块名.”,但是在先后导入两个不同模块的相同标识符时,后者会覆盖前者,所以要慎用此方法。

4._name_属性

我们上述打印了math模块里的所有标识符,其中第三个就是我们要重点提的__name__属性,其实不只是math,python会为每一个模块自动添加一个__name__属性的系统变量,当这个变量值为’__main__’时,表示该模块的主程序在运行,而当一个模块被另一个程序首导入的时候,会激活主程序,运行当前模块下的所有,所以如果不希望运行一个模块中的所有部分,那么要将这部分代码写在一个条件语句中,如下所示:

举例:新键一个python模块,取名Fibonacci.py


同目录下再新建一个模块,取名test.py,先导入Fibonacci模块,后随便写点代码。

输出结果:
我是斐波那契数列的第八项: 21
==================== test开始 ====================
我是斐波那契数列的第九项: 34
                               
运行test.py程序后发现输出结果不仅包括当前模块的输出内容,还包含Fibonacci模块的输出执行语句。但是,我们的本意只是希望在test.py模块中使用Fibonacci模块的fib()方法,不希望执行其他语句,这时只需要将Fibonacci模块中函数之外的代码写在判断主程序运行的条件语句里即可。
将Fibonacci.py改为:


再来运行test.py发现程序运行符合我们的要求。

相关热词: python

     
编程入门 编程教程 编程资源 编程问答