python import

模块

通常模块为一个文件,直接使用import来导入就好了。可以作为module的文件类型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。

通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

一模块
你可以使用import语句将一个源代码文件作为模块导入.例如:

# 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()
 ...

用逗号分割模块名称就可以同时导入多个模块: 
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    # 被导入时,会自动调用这部分代码

时间: 2024-11-05 22:04:13

python import的相关文章

Python import 【总结】

Python import总结 1     前言 可能网上很多文章或博客都没解释清楚,作者自己也苦心于Python的import.至此,把自己的总结的分享给大家,本文不做基础讲解,仅说明疑惑的地方. 新版本的Pycharm 2017.1.1,对自己定义的模块都有提示,写代码的提示(如方法,变量). 2     目录 3     本质 import的本质,针对包和模块来说,对于版本Python2和Python3来说,意义一样的,仅拿Python2做实验说明,Python3不做赘述.Python2版

python import 搜索路径 路径设置 pythonpath 库

python import 导入概述 在一个导入语句中的模块名起到两个作用:识别加载的外部文档,也会变成赋值给被载入模块的变量,模块定义的对象也会在执行时创建,就是在Import执行时,import会一次运行在目标文档中的语句从而建立其中的内容 程序第一次导入指定文件文件时执行的步骤: 找到模块文件 编译成位码(如果需要) 执行模块的代码来创建其所定义的对象 这三个步骤只在程序执行时, 模块第一次导入时才会进行,在这之后导入相同模块时,会跳过这三个步骤,而只是提取内存中已加载的模块对象 impo

python import 与 from .... import ...区别

在python用import或者from...import来导入相应的模块. 模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候, 直接把相应的模块导入到我们的程序中,我们就可以使用了. pycharm 工具 #!/bin/python # filename:test.py import time; print time.ctime() time.sleep(5) print time.ctime() 打印: C:\Python27\python.exe C:

python import this

>>> import thisThe Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability cou

python import 自己写的模块

在使用python 的 import 时,可能会发生 "TypeError: 'module' object is not callable" 这个信息是说你试图把这个模块作为一个函数来调用,但它却无法调用. 一个模块里有a,b两个函数, 要调用函数a,必须先调用整个模块,再调用函数a 举个例子:

python import 自己的包

在写python时,有时候写的一个python文件可能需要被其他python文件所用,那么可以用导入包 import 的 方式: 1.自己写的包放到哪里? >>> import sys >>> sys.path ['', '/usr/lib64/python34.zip', '/usr/lib64/python3.4', '/usr/lib64/python3.4/plat-linux', '/usr/lib64/python3.4/lib-dynload', '/us

Python import 自定义模块

1.如果导入的模块和主程序在同个目录下,直接import就行了 2.如果导入的模块是在主程序所在目录的子目录下,可以在子目录中增加一个空白的__init__.py文件,该文件使得python解释器能将子目录其他.py文件当成一个模块,然后直接通过"import 子目录.模块"导入即可. 比如: import sub.test                    #sub为子目录,test为模块名 sub.test.function()                #调用模块函数 3

Python import 模块导入问题

最近在用Python做决策树(Decision tree)时, 遇见了一个以前没有遇到的问题,就是用'import sklearn.tree'时一切正常,但是'import sklearn..... sklearn.tree'时却报错说: AttributeError: 'module' object has no attribute 'tree'. python的导入机制是这样的,在用 'import sklearn' 时,它只会导入 \${sklearn_dir}/__init__.py 里

python import 和 from.........import 模块加载和作用域

import导入:如import moduleName 变量名moduleNmae有两个目的:识别要被载入的外部文件同时生成脚本中的变量,在文件加载后,用来引用模块对象:因为import使一个变量名引用整个模块对象,我们必须通过模块名称来得到该模块的属性 from语句: from会把模块内的变量名赋值到另一个作用域(把模块中的变量名并且在from字句中选择的复制到了进行导入的作用域之内),所以它就可以让我们直接在脚本中使用复制后的变量而不用通过模块 默认情况下,Python只对每个文件的每个进程

多版本python import 问题解决方案

原文http://www.tuicool.com/articles/EnE7nm6 多版本Python共存[支持使用pip安装包] 有时特殊需要会要用到高版本的Python, 但是系统自带的版本又是很多其他工具依赖的, 不能随意更新. 所以就会考虑安装另一个版本的python环境, 然后需要用到这个版本时就在脚本头部指明 #/usr/bin/env python2.7 这样. ## 下载要安装的 Python版本源码包(我用的是 2.7 版本) wget 'http://www.python.o