码迷,mamicode.com
首页 > 编程语言 > 详细

Python进阶【第十篇】模块(上)

时间:2018-04-14 12:29:37      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:不同   维护   引入   必须   产生   屏蔽   方法   空间   文件的   

·一、模块

模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)

当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。

模块主要有三种:

  • Python标准库
  • 第三方模块
  • 应用程序自定义模块

另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突

二、模块导入

1.import语句

import module1[, module2[,... moduleN]

Python解释器有自己的搜索路径,存在sys.path里,然后通过此路径找到相应文件。但如果在当前目录下存在与要引入模块同名的文件,就会把要引入的模块屏蔽掉。

引用多个时,用逗号隔开

2.from...import语句

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

此声明不会把整个modulename模块导入到当前的命名空间中,只会将它里面的name1或name2单个引入到执行这个声明的模块的全局符号表,要几个引几个。

省力的办法:

from modname import *

该方法可以一次性导入一个模块中的所有项目,但容易因为引入的其它来源的命名,很可能覆盖了已有的定义。

3.运行本质

#1 import test
#2 from test import add 

无论1还是2,首先通过sys.path找到test.py,然后执行test脚本(全部执行),区别是1会将test这个变量名加载到名字空间,而2只会将add这个变量名加载进来。

三、包(package)

包就是一个包含有__init__.py文件的文件夹,所以其实创建包的目的就是为了用文件夹将文件/模块组织起来。

在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错。

创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块

注意事项

1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

2、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

3、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

.py执行时会把自己的上一级目录加载进去,而上一级目录所包含的.py文件,即与执行目录在同一级的文件可直接import,若在同一层有一个包,要引用该包下的模块或者.py文件,则应

from 包名 import .py

涉及多层的,层与层之间用.连接。

  

 

Python进阶【第十篇】模块(上)

标签:不同   维护   引入   必须   产生   屏蔽   方法   空间   文件的   

原文地址:https://www.cnblogs.com/bep-feijin/p/8831018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!