标签:style blog http ar color 使用 sp for strong
自我包含并且有组织的代码片断就是模块( module )
模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。实际的角度,模块往往对应Python程序文件。
每个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名。模块可以由两个语句和一个重要的内置函数进行处理。
import: 使客户端(导入者)以一个整体获取一个模块。
from:容许客户端从一个模块文件中获取特定的变量名。
reload:在不中止Python程序的情况下,提供了一个重新载入模块文件代码的方法。
导入模块时,不带模块的后缀名,比如.py
Python搜索模块的路径:
后缀.py文本文件,模块顶层(模块内的全局变量、类和函数的声明)指定的所有变量名都会变成其属性。
定义一个module.py模块
from语句
from将获取(复制)模块特定变量名
from 模块名 import 需要复制的属性
from 模块名 import 需要复制的属性 as 新的属性名
from会把变量名赋值到另一个作用域,所以它就可以让我们直接在脚本中使用复制后的变量名,而不是通过模块
from 模块名 import *
取得模块顶层所有赋了值的变量名的拷贝
模块只导入一次,因为该操作开销大
import和from是赋值语句,是可执行的语句,可以嵌套到if ,def语句中
和def一样import和from都是隐性赋值语句
import将整个模块对象赋值给一个变量名from将一个或多个变量名赋值给另一个模块中同名的对象
**from as将一个或者多个变量名赋值给另一个模块中不同名的对象
>>> from module import name,age复制多个变量名时要用逗号隔开
>>> name,age
(‘diege‘, 18)
>>> from module import name as myname,age as myage复制多个变量名并改变需时需要用逗号隔开多个as
from让变量位置更隐秘和模糊。
from语句有破坏命名空间的潜质。如果from导入变量,而那些变量碰巧和作用域中现有的变量同名,变量就会被悄悄地覆盖掉。
使用简单的import时就不会存在这个问题。因为必须通过模块名才能获取其内容。
真正务实的建议就是:简单模块一般倾向于使用import而不是from。
多数的from语句是用于明确列举出想要的变量,而且限制在每个文件中只用一次from *形式。
何时使用inport
当使用两个不同的模块内定义的相同变量名时,才真的必须使用import.用from会覆盖。
模块程序代码默认值对每个过程执行一次,要强制使模块代码重新载入并重新运算需要使用reload内置函数。
reload是函数,import是语句。两个语法不一样。
reload()之前需得import过一次
import语句实际上调用__import__()函数
如果我们有一个testa.py文件,我们可以用module=__import__(‘testa‘)来导入它。这样可以用module.属性来使用testa.py中的属性
模块的命名空间能通过属性__dict__(module.__dict__)或dir(module)获取
由于导入而建立的模块的命名空间是字典,可通过模块对象相关联的内置__dict__属性读取。
dir函数查看,大至与对象的__dict__属性的键排序后的列表相等,但是它还包含了类继承的变量名。
模块是一个独立的作用域。
包是一个有层次的文件目录结构, 它定义了一个由模块和子包组成的 Python 应用程序执行环境。Python 1.5 加入了包, 用来帮助解决如下问题:
import web.child_web.demo
from web.child_web.demo import x
.号路径相当于机器上目录层次的路径
Web在容器目录src中,src这个目录可以在python模块搜索路径中找到。
关于__init__.py
如果选择使用包导入,那就必须遵循一条约束:包导入语句的路径的每个目录内部都必须有__init__.py这个文件,否则导入包会失败。
Web和child_web必须包含有__init__.py,而src是容器目录,不需要__init__.py文件,因为本身不在import语句中。
__init__.py文件可以包含程序代码,也可以是空的。更通常情况下,__init__.py文件扮演了包初始化的挂钩替目录产生模块命名空间以及用目录导入实现from 行为的角色。
__init__.py文件可以包含程序代码,也可以是空的。更通常情况下,__init__.py文件扮演了包初始化的挂钩替目录产生模块命名空间以及用目录导入实现from 行为的角色。
包初始化:
首次导入某个目录时,会自动执行该目录下__init__.py文件中所有程序代码。
所以这个文件就是放置包内文件所需初始化的代码的场所。可以使用其初始化文件,创建所需的数据文件,连接数据库等。
from 语句的行为:
作为一个高级功能,可以在__init__.py文件中使用__all__列表来定义目录以form 语句形式导入时,需要导出什么。__all__列表是指出当包(目录—)名称使用`from `的时候,应该导入的子模块名称清单。
eg:
常见的第三方扩展都是以包目录形式发布给用户,而不是单纯的模块列表。
这样就可以通过路径来导入
from mod_python.apache import CallBack
从mod_python包(一个安装子目录)的apache模块取出一些变量
2. 通过变量名字符串导入模块的方法import或from语句内的模块名是"硬编码"的变量名。
3. 这里python会试着导入文件x.py为了避免发生这样的问题,通常的做法就是把import语句构造成python代码的字符串,再传给exec语句执行:
>>> modname=‘string‘
>>> exec "import "+modname
exec语句以及和他类似eval会编译一段字符串代码,将其传给Python解析器来执行。
标签:style blog http ar color 使用 sp for strong
原文地址:http://www.cnblogs.com/sunnyjiangjie/p/4119974.html