zoukankan      html  css  js  c++  java
  • python import

    import可以导入俩种类型的文件

    1 module
    通常模块为一个文件,直接使用import来导入就好了。可以作为module的文件类型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。
    2 package
    通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

    例子
    1 直接导入py文件例子

    mystr.py内容为
    #coding:utf-8
    import sys

    def printf(format, *args):
    sys.stdout.write(format % args)

    def format(format, *args):
    return (format % args);

    def printf2(format, *args):
    sys.stdout.write(format % args)

    __all__ = [ 'printf', 'format' ]

    #如果一个模块如果定义有列表__all__,则from module import * 语句只能导入__all__列表中存
    #在的对象,比如 from module import * 只能使用printf和format
    #如果要使用printf2,只能显示写 from module import printf2

    测试文件使用mystr.py里面的函数,需要导入,可以这样写

    import mystr
    mystr.printf("hello world %s", "nihalo")
    每次需要引用模块里面的函数时都要注明函数是在哪个模块,以便python能找到调用

    -- 如果我觉得mystr这个名字不好或者跟我当前模块定义的一些名字会有冲突,想改变名字是否可以,OK使用as关键字
    import mystr as cstring
    cstring.printf("hello world %s", "nihalo")

    -- 如果觉得不想使用函数或者类每次都要module.xxxx这样的写法,有没办法把被导入模块的一个或多个对象直接放入当前的名字空间,可以使用from关键字,使用from语句可以将模块中的对象直接导入到当前的名字空间
    from mystr import *
    printf("hello world %s", "nihalo")

    -- 一个模块可以被导入,也可以是被直接执行,怎么区分? 每个模块都拥有 __name__ 属性,它是一个内容为模块名字的字符串。最顶层的模块名称是 __main__ .命令行或是交互模式下程序都运行在__main__ 模块内部. 利用__name__属性,我们可以让同一个程序在不同的场合(单独执行或被导入)具有不同的行为
    # 检查是单独执行还是被导入
    if __name__ == '__main__':
    # Yes
    statements
    else:
    # No (可能被作为模块导入)
    statements


    **注意**
    import 语句可以在程序的任何位置使用,你可以在程序中多次导入同一个模块,但模块中的代码*仅仅*在该模块被首次导入时执行。后面的import语句只是简单的创建一个到模块名字空间的引用而已

    **模块搜索路径**
    导入模块时,解释器会搜索sys.path列表,这个列表中保存着一系列目录,第一个目录就是你执行的py的目录,比如
    D:后台处理技术pythonimport
    D:Python27Libidlelib
    D:Python27libsite-packagesvirtualenv-15.1.0-py2.7.egg
    C:WINDOWSsystem32python27.zip
    D:Python27DLLs
    D:Python27lib
    D:Python27libplat-win
    D:Python27liblib-tk
    D:Python27
    D:Python27libsite-packages
    D:Python27libsite-packagesPIL

    如果要导入的一个文件在一个目录里面,如果不采用包的方式,还可以sys.path.append导入文件所在的路径,这样解释器就能找到文件了
    sys.path.append(".\subpymod")
    from mystr2 import *

    for k in sys.path:
    print k
    -------------------------------------------------------------------------------------------------------------------------

    2 导入包

    __init__.py的作用

    1. 相当于class中的def __init__(self):函数,用来初始化模块。

    2. 把所在目录当作一个package处理

    3. from-import 语句导入子包时需要用到它。 如果没有用到, 他们可以是空文件。

    如引入package.module下的所有模块
    from package.module import *
    这样的语句会导入哪些文件取决于操作系统的文件系统. 所以我们在__init__.py 中加入 __all__变量.

    该变量包含执行这样的语句时应该导入的模块的名字. 它由一个模块名字符串列表组成.

  • 相关阅读:
    写在毕业季前
    使用Github Page鼓励自己每日编程
    win8/Metro开发系列一 Xaml布局
    AlertDialog详解
    安卓项目文件目录
    Andriod布局之LinearLayout
    Andriod定时任务
    android 设置布局横屏竖屏
    Android默认启动程序问题
    Android全屏显示
  • 原文地址:https://www.cnblogs.com/sysnap/p/6594055.html
Copyright © 2011-2022 走看看