码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python模块和包:sys模块、os模块和变量函数的使用


    文章目录

    • 模块(module)
    • 引入外部模块
    • 引入部分内容
    • 包 (package)
    • 示例代码
    • 开箱即用
      • sys模块
        • sys.argv
        • sys.modules
        • sys.path
        • sys.platform
        • sys.exit()
      • os模块
        • os.environ
        • os.system()
        • os模块中的变量、函数和类
      • 测试代码
      • 模块中的变量和函数的使用
    • 总结:
    • python精品专栏推荐
      • python基础知识(0基础入门)
      • python爬虫知识

    模块(module)

    模块化指将一个完整的程序分解为一个一个小的模块,通过将模块组合,来搭建出一个完整的程序。模块化具有方便开发、维护和复用的优点。在Python中,每个py文件就是一个模块。

    引入外部模块

    在一个模块中引入外部模块有两种方式:import 模块名 和 import 模块名 as 模块别名。后者可以引入同一模块多次,但实例只会创建一个。import语句可以在程序的任何位置调用,但一般情况下,应该统一写在程序开头。在每个模块内部都会有一个__name__属性,通过这个属性可以获取到模块的名字。__name__值为__main__的模块是主模块,也是我们直接通过python执行的模块。

    引入部分内容

    也可以只引入模块中的部分内容,语法为from 模块名 import 变量,变量....。可以为引入的变量使用别名,语法为from 模块名 import 变量 as 别名。

    包 (package)

    包是由多个模块组成的一个文件夹。当一个模块的代码过多时,或需要将一个模块分解为多个模块时,就需要使用到包。在包中需要一个__init__.py文件,这个文件可以包含有包中的主要内容。

    示例代码

    以下是一些示例代码:

    # 引入test_module模块,并指定别名test
    import test_module as test
    
    # 访问模块中的变量
    print(test.a, test.b)
    
    # 创建Person的实例p
    p = test.Person()
    print(p.name)
    
    # 只引入模块中的特定部分
    from m import Person,test
    
    # 引入到模块中所有内容,不推荐使用
    from m import *
    
    # 为引入的变量使用别名
    from m import test2 as new_test2
    
    # 引入包hello中的模块
    from hello import a,b
    
    print(a.c)
    print(b.d)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    注意:__pycache__是模块的缓存文件,可以用来提高程序运行的性能。

    # 模块缓存文件
    __pycache__ 是模块的缓存文件。在Python中,代码在执行前需要被解析器转换为机器码,然后再执行。为了提高程序的运行性能,Python会在第一次编译后将代码保存到一个缓存文件中。下次加载该模块时,就可以直接加载缓存中编译好的代码,而不需要重新编译。
    
    例子:
    # 引入math模块
    import math
    
    # 调用math模块中的函数
    print(math.sqrt(16))
    
    # 输出结果:4.0
    
    注意:在实际编写代码时,应该根据实际情况选择引入模块的方式,避免引入不必要的内容,以减少内存占用和提高代码的可读性。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    以上是关于模块和包的相关内容。使用模块化可以使代码更加清晰、易于维护和复用。同时,包的使用可以将大型程序分解为更小的模块,便于管理和组织代码。编写模块和包的时候,要注意命名规范,并合理选择引入模块的方式。

    当一个模块被导入时,Python会执行该模块中的所有顶级代码(即不在任何函数、类或条件语句中的代码)。这通常用于初始化模块中的变量、定义函数和类等操作。

    示例代码:

    # module.py
    print("This is a module.")
    
    def greet(name):
        print(f"Hello, {name}!")
    
    class Person:
        def __init__(self, name):
            self.name = name
    
    # main.py
    import module
    
    print("This is the main module.")
    
    module.greet("Alice")
    
    p = module.Person("Bob")
    print(p.name)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    运行 main.py 输出:

    This is a module.
    This is the main module.
    Hello, Alice!
    Bob
    
    • 1
    • 2
    • 3
    • 4

    可以看到,当 main.py 导入 module 模块时,先执行了 module.py 中的顶级代码,然后才继续执行 main.py 中的代码。

    此外,可以使用 if __name__ == "__main__": 来判断当前模块是否被直接执行。这样可以使模块既可以作为独立的程序执行,又可以被其他模块导入和使用。

    示例代码:

    # module.py
    def square(x):
        return x * x
    
    if __name__ == "__main__":
        # 当前模块被直接执行
        # 执行一些测试代码
        print(square(5))
        print(square(10))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    可以单独执行 module.py,也可以在其他模块中导入并使用 square 函数。当作为独立程序执行时,测试代码会被执行;当作为模块导入时,测试代码不会被执行。

    好的,我将按照要求整理这篇文章,格式为Markdown格式。请稍等片刻。

    开箱即用

    为了实现开箱即用的思想,Python中为我们提供了一个模块的标准库。在这个标准库中,有很多很强大的模块我们可以直接使用,并且标准库会随Python的安装一同安装。

    sys模块

    sys模块提供了一些变量和函数,使我们可以获取到Python解析器的信息或者通过函数来操作Python解析器。我们可以引入sys模块:

    import sys
    
    • 1

    sys.argv

    sys.argv用于获取执行代码时,命令行中所包含的参数。该属性是一个列表,列表中保存了当前命令的所有参数。例如:

    print(sys.argv)
    
    • 1

    sys.modules

    sys.modules用于获取当前程序中引入的所有模块。modules是一个字典,字典的key是模块的名字,字典的value是模块对象。我们可以使用pprint模块对其进行格式化输出。例如:

    import pprint
    pprint.pprint(sys.modules)
    
    • 1
    • 2

    sys.path

    sys.path是一个列表,列表中保存的是模块的搜索路径。例如:

    pprint.pprint(sys.path)
    
    • 1

    sys.platform

    sys.platform表示当前Python运行的平台。例如:

    print(sys.platform)
    
    • 1

    sys.exit()

    sys.exit()函数用于退出程序。可以在括号中添加字符串作为退出时的提示信息。例如:

    sys.exit('程序出现异常,结束!')
    print('hello')
    
    • 1
    • 2

    os模块

    os模块让我们可以对操作系统进行访问。我们可以引入os模块:

    import os
    
    • 1

    os.environ

    通过os.environ属性可以获取到系统的环境变量。例如:

    pprint.pprint(os.environ['path'])
    
    • 1

    os.system()

    os.system()函数可以用来执行操作系统的命令。例如,可以执行dir命令查看当前目录的文件列表:

    os.system('dir')
    
    • 1

    os模块中的变量、函数和类

    我们可以在模块中定义变量、函数和类,并在其他地方使用。例如:

    a = 10
    b = 20
    
    _c = 30  # 添加了_的变量,只能在模块内部访问
    
    def test():
        print('test')
    
    def test2():
        print('test2')
    
    class Person:
        def __init__(self):
            self.name = '孙悟空'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    测试代码

    我们可以编写一些测试代码来验证模块的功能。这部分代码只有当当前文件作为主模块时才会执行,而当模块被其他模块引入时不会执行。我们可以通过__name__属性来检查当前模块是否是主模块。

    if __name__ == '__main__':
        test()
        test2()
        p = Person()
        print(p.name)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    模块中的变量和函数的使用

    在模块中定义的变量和函数可以在其他地方进行使用。例如,假设我们将上述代码保存为一个名为example.py的模块文件:

    # example.py
    
    a = 10
    b = 20
    
    _c = 30
    
    def test():
        print('test')
    
    def test2():
        print('test2')
    
    class Person:
        def __init__(self):
            self.name = '孙悟空'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    然后,在另一个Python脚本中,我们可以引入该模块并使用其中定义的变量和函数:

    # main.py
    
    import example
    
    print(example.a)
    print(example.b)
    
    example.test()
    example.test2()
    
    p = example.Person()
    print(p.name)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    运行main.py,将会输出以下结果:

    10
    20
    test
    test2
    孙悟空
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这样,我们就可以在模块中封装一些常用的代码,并在其他地方进行复用。

    总结:

    • 使用sys模块可以获取到Python解析器的信息和操作Python解析器。
    • 使用os模块可以对操作系统进行访问,包括获取系统环境变量和执行系统命令。
    • 在模块中定义的变量、函数和类可以在其他地方进行使用。
    • 可以通过if __name__ == '__main__':来编写测试代码,只有当模块作为主模块运行时才会执行。

    python精品专栏推荐


    python基础知识(0基础入门)

    【python基础知识】0.print()函数
    【python基础知识】1.数据类型、数据应用、数据转换
    【python基础知识】2.if条件判断与条件嵌套
    【python基础知识】3.input()函数
    【python基础知识】4.列表和字典
    【python基础知识】5.for循环和while循环
    【python基础知识】6.布尔值和四种语句(break、continue、pass、else)
    【python基础知识】7.实操-用Python实现“文字PK”小游戏(一)
    【python基础知识】7.实操-用Python实现“文字PK”小游戏(二)
    【python基础知识】8.编程思维:如何解决问题-思维篇
    【python基础知识】9.函数的定义和调用
    【python基础知识】10.用函数编写程序 - 实操篇
    【python基础知识】10.用Python实现石头剪刀布小游戏-函数实操篇
    【python基础知识】11.如何debug -常见报错原因及排查思路 - 思维篇
    【python基础知识】12.类与对象(一)
    【python基础知识】12.类与对象(二)
    【python基础知识】13.类与对象(三)
    【python基础知识】13.类与对象(四)
    【python基础知识】14.图书管理系统的搭建(类与对象实操)
    【python基础知识】15.编码基础知识
    【python基础知识】16.文件读写基础及操作
    【python基础知识】16.“古诗默写题”的python实现(文件读写和编码-实操篇)
    【python基础知识】17.模块的概念以及如何引入
    【python基础知识】18.实操-使用python自动群发邮件
    【python基础知识】19.产品思维以及流程图的使用 - 思维篇
    【python基础知识】20.“午饭吃什么”的python实现(产品思维-实操篇)
    【python基础知识】21.高效偷懒的正确打开方式-毕业篇
    【python文件处理】CSV文件的读取、处理、写入
    【python文件处理】Excel自动处理(使用 openpyxl)
    【python文件处理】-excel格式处理


    python爬虫知识

    【python爬虫】1.爬虫基础知识
    【python爬虫】2.网页基础知识
    【python爬虫】3.爬虫初体验(BeautifulSoup解析)
    【python爬虫】4.爬虫实操(菜品爬取)
    【python爬虫】5.爬虫实操(歌词爬取)
    【python爬虫】6.爬虫实操(带参数请求数据)
    【python爬虫】7.爬到的数据存到哪里?
    【python爬虫】8.温故而知新
    【python爬虫】9.带着小饼干登录(cookies)
    【python爬虫】10.指挥浏览器自动工作(selenium)
    【python爬虫】11.让爬虫按时向你汇报
    【python爬虫】12.建立你的爬虫大军
    【python爬虫】13.吃什么不会胖(爬虫实操练习)
    【python爬虫】14.Scrapy框架讲解
    【python爬虫】15.Scrapy框架实战(热门职位爬取)
    【python爬虫】16.爬虫知识点总结复习

  • 相关阅读:
    Nginx安装教程-Linux
    10道高频webpack面试题快问快答
    SD卡使用记录
    Apollo GraphQL
    UE4和C++ 开发-常用的宏(二)UPROPERTY(类似于Unity中C#的特性[SerializeField])
    mysql学习笔记1:mysql字符集和字符集编码
    ctf_show笔记篇(web入门---文件包含)
    对于类和对象的理解
    关于:在 Windows 10/11 中共享文件和打印机
    计算机视觉:驾驶员疲劳检测
  • 原文地址:https://blog.csdn.net/qq_41308872/article/details/132856258
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号