Python核心编程读笔 11:模块
第12章 模块
1、基本概念
模块的文件名就是模块名字.py
每个模块都定义了自己唯一的名称空间
模块的搜索路径:会被保存在 sys 模块的 sys.path 变量里
>>>sys.path
>>>sys.path.append( …… ) #修改python的搜索路径
>>>sys.path.insert( ... )
2、命名空间
python在执行期间有两个或三个活动的名称空间。分别是:局部名称空间, 全局名称空间和内建名称空间, 但局部名称空间在执行期间是不断变化的, 所以说"两个或三个"。 从名称空间中访问这些名字依赖于它们的加载顺序, 或是系统加载这些名称空间的顺序。
Python 解释器首先加载内建名称空间。 它由 __builtins__ 模块中的名字构成。 随后加载执行模块的全局名称空间, 它会在模块开始执行后变为活动名称空间。
3、导入模块
(1)推荐的import模块的顺序
Python 标准库模块
Python 第三方模块
应用程序自定义模块
(2)from-import语句
在模块里导入指定的模块属性(指定名称):from module import name1[ , name2[,... nameN] ]
(3)扩展的import语句
即指定别名:
import Tkinter as tk
from cgi import FieldStorage as form
(4)被导入到导入者作用域的名字
只从模块导入名字的另一个副作用是那些名字会成为局部名称空间的一部分。 这可能导致覆盖一个已经存在的具有相同名字的对象。 而且对这些变量的改变只影响它的局部拷贝而不是所导入模 块的原始名称空间。 也就是说, 绑定只是局部的而不是整个名称空间。
举例:
#############
# imptee.py #
#############
foo = 'abc'
def show():
print 'foo from imptee:', foo
#############
# impter.py #
#############
from imptee import foo, show
show()
foo = 123
print 'foo from impter:', foo
show()
运行结果是:
foo from imptee: abc
foo from impter: 123
foo from imptee: abc
解决办法:
使用 import 和完整的标识符名称(句点属性标识)。
#############
# impter.py #
#############
import imptee
imptee.show()
imptee.foo = 123
print 'foo from impter:', imptee.foo
imptee.show()
此时的运行结果是:
foo from imptee: abc
foo from impter: 123
foo from imptee: 123
注意点:
a 不要滥用 "from module import *"
4、模块内建函数
(1)__import__()
导入模块函数,功能同import语句:
sys = __import__('sys') 功能同 import sys
(2)globals() 和 locals()
分别返回调用者全局和局部名称空间的字典
(3)reload()
重新导入一个已经导入的模块:reload( module )
5、包
包是一个有层次的文件目录结构, 它定义了一个由模块和子包组成的 Python 应用程序执行环境。包可用来解决如下问题:
为平坦的名称空间加入有层次的组织结构
允许程序员把有联系的模块组合到一起
允许分发者使用目录结构而不是一大堆混乱的文件
帮助解决有冲突的模块名称
与类和模块相同, 包也使用句点属性标识来访问其元素。用标准的 import 和 from-import 语句导入包中的模块。
(1)目录结构
Phone/
__init__.py
common_util.py
Voicedta/
__init__.py
Pots.py
Isdn.py
Fax/
__init__.py
G3.py
Mobile/
__init__.py
Analog.py
igital.py
Pager/
__init__.py
Numeric.py
可以这样导入子包:
import Phone.Mobile.Analog
Phone.Mobile.Analog.dial()
也可使用 from-import 实现不同需求的导入:
from Phone import Mobile
Mobile.Analog.dial('555-1212')
from Phone.Mobile import Analog
Analog.dial('555-1212')
from Phone.Mobile.Analog import dial
dial('555-1212')
6、模块的其他特性
自动载入的模块
阻止属性导入
不区分大小的导入
源代码编码
导入循环
模块执行
Python核心编程读笔 11:模块的更多相关文章
- Python核心编程读笔 2
第三章 python基础 一.语句和语法 \n 标准的行分隔符 \ 继续上一行 ; 将两个语句连接在一行 : 分开代码块的头和体 代码块以缩进块的形式体现 python文件以模块的形式组织 二.变量赋 ...
- Python核心编程读笔 1
第一章 欢迎来到Python世界 1 Python特点: 高级的可进行系统调用的解释性语言 面向对象 可升级.扩展.移植 自动内存管理器(内存管理由Python解释器负责) 2 安装 Windows的 ...
- Python核心编程读笔 12:OOP
第13章 面向对象编程 一.基本概念 1.object类是所有类的基类,如果你的类没有继承任何其他父类,object 将作为默认的父类. 2.python创建实例时无需new: myFirstObje ...
- Python核心编程读笔 10:函数和函数式编程
第11章 函数和函数式编程 一 调用函数 1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...
- Python核心编程读笔 13:执行环境
第14章 执行环境 一.可调用对象 python有四种可调用对象:函数.方法.类.一些类的实例 1 函数 (1)内建函数(BIF) BIF是用c/c++写的,编译后放入python解释器,然后把它们 ...
- Python核心编程读笔 8: 文件和输入输出
第九章 文件和输入输出 一.文件内建函数.方法.属性 1 文件内建函数 file_object = open(file_name, access_mode='r', buffering=-1) 工厂函 ...
- Python核心编程读笔 7: 条件和循环
第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...
- Python核心编程读笔 5: python的序列
第六章 序列:字符串.列表.元组 一.序列 (1)序列类型操作符 seq[ind] 获得下标为 ind 的元素 seq[ind1:ind2] 切片操作 seq * expr 序列重复 expr 次 s ...
- Python核心编程读笔 4
第五章 数字 二.整形 1 布尔型 2 标准整数类型 3 长整型 数字后面加L,能表示非常非常大的数字 目前,整形和长整型逐渐统一!!! 三.双精度浮点数 四.复数 有关复数的几个概念: 表示虚数的语 ...
随机推荐
- android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
http://blog.csdn.net/lilu_leo/article/details/11952717 有时候需要在在代码中设置LayoutParams,自己为一个FrameLayout设置 ...
- LeetCode Day2
Power of Two /** * LeetCode: Power of Two * Given an integer, write a function to determine if it is ...
- sublime常用快捷键整理(未完待续)
sublime常用快捷键整理: 基本操作 cmd+o 打开文件 cmd+w 关闭当前tab cmd+n 打开新页 cmd+shift+n 打开刚刚关闭的页签 一.选择命令 1.多个单词选择 cmd+d ...
- chrome调试工具常用功能整理(转)
Elements chrome devtools 中 Elements panel 是审查 dom 元素和 css 的, 可以实时修改 dom/css. windows: ctrl + shift + ...
- 引言:Canvas绘图API快速入门
引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...
- HTML6注册表单输入日志标题
一.找到元素. var d = document.getElementById("") var d = document.getElementsByName("" ...
- ajax.request函数使用详解
Ajax.Request ? Ajax.Request( url, { method:method, parameters:para, postBody:xmlString, asynchrono ...
- ConnectivityManager与检查网络连接的使用
1.ConnectivityManager的作用 ConnectivityManager主要管理和网络管理相关的操作 TelephonyManager则管理和手机.运营商等的相关信息 WifiMana ...
- php中如何获取文件的正确路径
以上面的图片为例子 //我们这里需要使用到 $_FILE echo "<pre>"; print_r($_FILES); echo $_SERVER['DOCUMENT ...
- winform 拖动无边框窗体(调用Windows API)
第一步:将窗体的FormBoderStyle属性设置为None: 第二步:添加一个新类:Win32.cs 代码如下: public class Win32 { [DllImport("use ...