python import

模块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    # 被导入时,会自动调用这部分代码

相关文章
相关标签/搜索