zoukankan      html  css  js  c++  java
  • Python程序结构-模块

    Python程序结构-模块
     
    资料
    模块操作练习.docx
     
    模块定义
    • 在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']
     

     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Java 蓝桥杯 算法训练 貌似化学
    Java 蓝桥杯 算法训练 貌似化学
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    JAVA-蓝桥杯-算法训练-字符串变换
    Ceph:一个开源的 Linux PB 级分布式文件系统
    shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
  • 原文地址:https://www.cnblogs.com/JacquelineQA/p/13835687.html
Copyright © 2011-2022 走看看