zoukankan      html  css  js  c++  java
  • 【Python包】模块和包导入详解(import)

    1.模块(module)

    1.1 模块定义

    通常模块为一个.py文件,其他可作为module的文件类型还有".pyo"、".pyc"、".pyd"、".so"、".dll"。

    module 可看作一个工具类,可共用或者隐藏代码细节,将相关代码放置在一个module以便让代码更好用、易懂,让coder重点放在高层逻辑上。

    module能定义函数、类、变量,也能包含可执行的代码。

    1.2 模块作用

    1.大大提高了代码的可维护性。

    2.编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。

    3.使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

    1.3  模块来源

    ①Python内置的模块(标准库)②第三方模块 ③自定义模块。

    1.4 模块导入本质

    把引用的python文件解释一遍。

    1.5  模块导入方法

    import module  #引用一个模块module
    import module as md #引用模块module,使用别名md。代码中只能写成md,不能写module
    import module1, module2  #同时引用多个模块module1和module2
    from module import logger  #仅引用module中的logger函数。代码中可直接写成logger,无需使用module.logger
    from module import logger as frank  #引用module中的logger函数,使用别名frank。代码中只能直接写成frank,不能写logger

    1.6 模块导入案例解析

    1.6.1 import引入

    模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行,模块spam定义如下:

    #spam.py
    print('from the spam.py')
    
    money=1000
    
    def read1():
        print('spam->read1->money',money)
    
    def read2():
        print('spam->read2 calling read')
        read1()
    
    def change():
        global money
        money=0

    模块定义好后,我们可以使用 import语句来引入模块,语法如下:

    import module1[, module2[,... moduleN]

    案例1:第一次引用spam模块时,可执行spam中语句。

    import spam 
    执行结果:
    from the spam.py

     案例2:模块间的同名函数或变量完全不冲突。

    #测试money和spam.money不冲突(变量)
    import spam 
    money=10
    print(spam.money)
    执行结果:
    from the spam.py
    1000
    #测试read1与spam.read1不冲突(函数)
    import spam
    def read1():
        print('========')
    spam.read1()
    执行结果:
    from the spam.py
    spam->read1->money 1000
    #执行spam.change()操作的全局变量money仍然是spam中的
    import spam
    money=1
    spam.change()
    print(money)
    执行结果:
    from the spam.py
    1

     案例3:为已经导入的模块起别名的方式对编写可扩展的代码很有用

    假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块,例如:

    if file_format == 'xml':
         import xmlreader as reader  #reader为模块别名
    elif file_format == 'csv':
        import csvreader as reader   #reader为模块别名
    data=reader.read_date(filename)

    案例4:在一行导入多个模块

    import sys,os,re

     1.6.2 from..import..导入

    1.7 模块搜索路径

    2. 包(package)

    通常包总是一个目录,包目录下为首的一个文件便是 __init__.py,然后是一些模块文件和子目录。假如子目录中也有 __init__.py 那么它就是这个包的子包。

     可以使用import导入包,或者from + import来导入包中的部分模块。

    3.import的特点

    import语句是可以在程序中的任意位置使用。一个程序中多次引用同一个模块时,模块不会被重复导入。

    为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的import语句。

    # 文件test1.py
    import test2
    print test2.attr
    # 文件test2.py
    import test1
    attr = 'hello world'
    # 文件test.py
    import test1

    执行test.py,输出结果为:hello world

    说明:test.py中已经引用了test1,当文件test2.py再次引用test1时,则忽略引用。

    参考文档:

    Python3之模块及包的导入

    Python 3.x可能是史上最详解的【导入(import)】

    import的本质解析

    python import详解

     

  • 相关阅读:
    凤凰传奇
    信息孤岛
    别了,中珠
    吃苦要趁早
    触动——beyond歌词
    走出舒适区,迎接挑战
    创新永存
    信息时代
    变色龙时代——创新
    Java基本的数据类型
  • 原文地址:https://www.cnblogs.com/badboy200800/p/10757045.html
Copyright © 2011-2022 走看看