• Python程序结构-模块


    Python程序结构-模块
     
     
     
    模块定义
    • 在python中以文件的方式来组织模块,一个模块就是一个以.py结尾的文本文件,文件的名字就是模块的名字。
    • 模块是一个包含所有你定义的函数和变量的文件。
    • 模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
     

    模块调用
     
    调用方法1:import
    • 语法:import module1[, module2[,... moduleN]
    • 当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。
    • 一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
    • Python解释器所有查找的路径可以通过sys.path查看,里面包含了一个 Python 解释器自动查找所需模块的路径的列表。
     
    用例:
    (1)先在当前目录下建立一个python文件:fibo.py
    # 斐波那契(fibonacci)数列模块
    def fib(n):    # 定义到 n 的斐波那契数列
        a, b = 0, 1
        while b < n:
            print(b, end=' ')
            a, b = b, a+b
        print()
     
    def fib2(n): # 返回到 n 的斐波那契数列
        result = []
        a, b = 0, 1
        while b < n:
            result.append(b)
            a, b = b, a+b
        return result
     
    (2) 再建立测试文件test.py
    • 红色的就是fibo.py和test.py所在的文件目录
    import fibo
     
    fibo.fib(1000)
     
    result = fibo.fib2(1000)
    print(result)
     
    print(sys.path)
     
    输出:
    1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
     
    ['U:\Project\Python_Training\Pytho_Basic', 'U:\Project\Python_Training\Pytho_Basic', 'C:\Users\bluec\Anaconda3\envs\python3_for_training\python37.zip', 'C:\Users\bluec\Anaconda3\envs\python3_for_training\DLLs', 'C:\Users\bluec\Anaconda3\envs\python3_for_training\lib', 'C:\Users\bluec\Anaconda3\envs\python3_for_training', 'C:\Users\bluec\Anaconda3\envs\python3_for_training\lib\site-packages']
     
     
    调用方法2:from … import
    • 语法:from modname import name1[, name2[, ... nameN]],
    • 如果要调用模块中所有的函数,则from modname import *
    • 你从模块中导入一个指定的部分到当前命名空间中。
     
    用例:
    from fibo import *
     
    fib(1000)
     
    result = fib2(1000)
    print(result)
     
    输出:
    1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
     

     
    模块内部机制
     
    模块内定义的全局变量
    • 每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。
    • 可以放心大胆的在模块内部使用这些全局变量,而不用担心把其他用户的全局变量搞混。
     
    模块的__name__属性
    • 每一个模块都有一个内置的字符串变量__name__,当模块是被import时,__name__被设置成模块名(文件名),然而当模块在命令行被执行时__name__被设置成__main__。
    • __name__的主要作用就是用来区分,模块是直接被运行还是被导入。
     
    用例:在实际项目中使用__name__
     
    fibo.py,斐波那契(fibonacci)数列模块, 进行了内部测试。
    # 斐波那契(fibonacci)数列模块
     
    def fib(n):  # 定义到 n 的斐波那契数列
        a, b = 0, 1
        while b < n:
            print(b, end=' ')
            a, b = b, a + b
        print()
     
    def fib2(n):  # 返回到 n 的斐波那契数列
        result = []
        a, b = 0, 1
        while b < n:
            result.append(b)
            a, b = b, a + b
        return result
     
     
    # 该模块内部的测试代码
    print("fibo internal test:")
    fib(500)
    print(fib2(1000))
     
    test.py,调用fibo.py
    • 在import fibo时自动进行了该模块的初始化,也调用了其内部测试代码。
    import fibo
    # 调用成功
    print("==========>call model fibo:")
    fibo.fib(250)
     
    输出:
    fibo internal test:
    1 1 2 3 5 8 13 21 34 55 89 144 233 377
    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
    ==========>call model fibo:
    1 1 2 3 5 8 13 21 34 55 89 144 233
     
    fibo.py,斐波那契(fibonacci)数列模块, 使用__name__屏蔽内部测试。
    # 斐波那契(fibonacci)数列模块
     
     
    def fib(n):  # 定义到 n 的斐波那契数列
        a, b = 0, 1
        while b < n:
            print(b, end=' ')
            a, b = b, a + b
        print()
     
     
    def fib2(n):  # 返回到 n 的斐波那契数列
        result = []
        a, b = 0, 1
        while b < n:
            result.append(b)
            a, b = b, a + b
        return result
     
     
    # 该模块内部的测试代码
    if __name__ == '__main__':
        print("fibo internal test:")
        fib(500)
        print(fib2(1000))
     
    test.py,调用fibo.py
    • 在import fibo时自动进行了该模块的初始化,但屏蔽了其内部测试代码。
    import fibo
    # 调用成功
    print("==========>call model fibo:")
    fibo.fib(250)
     
    输出:
    ==========>call model fibo:
    1 1 2 3 5 8 13 21 34 55 89 144 233
     
     
    模块的__name__属性 【可选】
    • 找到模块内定义的所有名称。以一个字符串列表的形式返回。
     
    import fibo
     
    print(dir(fibo))
     
    输出:
    ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fib2']
     

     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    INFORMATION_SCHEMA.INNODB_LOCKS
    INFORMATION_SCHEMA.INNODB_TRX 详解
    用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览
    自助式BI对比评测:Tableau和FineBI
    4款最具影响力的自助式BI工具
    4款最具影响力的自助式BI工具
    用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级
    用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)
    zabbix 通过key 获取
    匿名hash
  • 原文地址:https://www.cnblogs.com/JacquelineQA/p/13834017.html
Copyright © 2020-2023  润新知