模块python
一般模块为一个文件,直接使用import来导入就行了。能够做为module的文件类型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。socket
包ide
一般包老是一个目录,可使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件即是 __init__.py。而后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。函数
一模块
你可使用import语句将一个源代码文件做为模块导入.例如:spa
# file : spam.py
a = 37 # 一个变量
def foo: # 一个函数
print "I'm foo"
class bar: # 一个类
def grok(self):
print "I'm bar.grok"
b = bar() # 建立一个实例命令行
使用import spam 语句就能够将这个文件做为模块导入。系统在导入模块时,要作如下三件事:
1.为源代码文件中定义的对象建立一个名字空间,经过这个名字空间能够访问到模块中定义的函数及变量。对象
2.在新建立的名字空间里执行源代码文件.作用域
3.建立一个名为源代码文件的对象,该对象引用模块的名字空间,这样就能够经过这个对象访问模块中的函数及变量,如: 字符串
import spam # 导入并运行模块 spam
print spam.a # 访问模块 spam 的属性
spam.foo()
c = spam.bar()
...get
用逗号分割模块名称就能够同时导入多个模块:
import socket, os, regex模块导入时可使用 as 关键字来改变模块的引用对象名字:
import os as system
import socket as net, thread as threads
system.chdir("..")
net.gethostname()
使用from语句能够将模块中的对象直接导入到当前的名字空间. from语句不建立一个到模块名字空间的引用对象,而是把被导入模块的一个或多个对象直接放入当前的名字空间:
from socket import gethostname
# 将gethostname放如当前名字空间
print gethostname() # 直接调用
socket.gethostname() # 引起异常NameError: socket
from语句支持逗号分割的对象,也可使用星号(*)表明模块中除下划线开头的全部对象:
from socket import gethostname, socket
from socket import * # 载入全部对象到当前名字空间
不过,若是一个模块若是定义有列表__all__,则from module import * 语句只能导入__all__列表中存在的对象。
# module: foo.py
__all__ = [ 'bar', 'spam' ] # 定义使用 `*` 能够导入的对象
另外, as 也能够和 from 联合使用:
from socket import gethostname as hostname
h = hostname()
import 语句能够在程序的任何位置使用,你能够在程序中屡次导入同一个模块,但模块中的代码*仅仅*在该模块被首次导入时执行。后面的import语句只是简单的建立一个到模块名字空间的引用而已。sys.modules字典中保存着全部被导入模块的模块名到模块对象的映射。这个字典用来决定是否须要使用import语句来导入一个模块的最新拷贝.
from module import * 语句只能用于一个模块的最顶层.*特别注意*:因为存在做用域冲突,不容许在函数中使用from 语句。
每一个模块都拥有 __name__ 属性,它是一个内容为模块名字的字符串。最顶层的模块名称是 __main__ .命令行或是交互模式下程序都运行在__main__ 模块内部. 利用__name__属性,咱们可让同一个程序在不一样的场合(单独执行或被导入)具备不一样的行为,象下面这样作:
# 检查是单独执行仍是被导入
if __name__ == '__main__':
# Yes
statements # 执行python脚本时,会调用这部分代码
else:
# No (可能被做为模块导入)
statements # 被导入时,会自动调用这部分代码