Python模块和包:sys模块、os模块和变量函数的使用

简介: Python模块和包:sys模块、os模块和变量函数的使用

模块(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)

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

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

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

当一个模块被导入时,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)

运行 main.py 输出:

This is a module.
This is the main module.
Hello, Alice!
Bob

可以看到,当 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))

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

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

开箱即用

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

sys模块

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

import sys

sys.argv

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

print(sys.argv)

sys.modules

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

import pprint
pprint.pprint(sys.modules)

sys.path

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

pprint.pprint(sys.path)

sys.platform

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

print(sys.platform)

sys.exit()

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

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

os模块

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

import os

os.environ

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

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

os.system()

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

os.system('dir')

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

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

a = 10
b = 20
_c = 30  # 添加了_的变量,只能在模块内部访问
def test():
    print('test')
def test2():
    print('test2')
class Person:
    def __init__(self):
        self.name = '孙悟空'

测试代码

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

if __name__ == '__main__':
    test()
    test2()
    p = Person()
    print(p.name)

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

在模块中定义的变量和函数可以在其他地方进行使用。例如,假设我们将上述代码保存为一个名为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 = '孙悟空'

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

# main.py
import example
print(example.a)
print(example.b)
example.test()
example.test2()
p = example.Person()
print(p.name)

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

10
20
test
test2
孙悟空

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

总结:

  • 使用sys模块可以获取到Python解析器的信息和操作Python解析器。
  • 使用os模块可以对操作系统进行访问,包括获取系统环境变量和执行系统命令。
  • 在模块中定义的变量、函数和类可以在其他地方进行使用。
  • 可以通过if __name__ == '__main__':来编写测试代码,只有当模块作为主模块运行时才会执行。
相关文章
|
2月前
|
弹性计算 运维 Kubernetes
看阿里云操作系统控制台如何一招擒拿网络丢包
阿里云操作系统控制台帮忙客户快速定位问题,不仅成功完成业务部署并实现稳定运行,更有效遏制了持续性成本消耗。
|
5月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
218 14
|
6月前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
75 8
|
6月前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 "hello world!" 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
97 5
|
8月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
1391 23
|
7月前
|
Python API 监控
将Python CLI工具发布为pip模块的完整指南
注册PyPI账户 访问PyPI官网注册账户 推荐使用双因素认证增强安全性 生成API令牌 访问PyPI账户管理 生成具有"Upload packages"权限的令牌,妥善保存 确保模块名唯一性 在PyPI搜索页面验证模块名未被使用 建议使用小写字母和连字符的组合(如my-cli-tool)
134 9
|
10月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
420 0
Vanilla OS:下一代安全 Linux 发行版
|
7月前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
371 10
|
8月前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
280 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
|
8月前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
187 7