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,bprint(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 moduleprint("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 * xif __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.pya = 10
b = 20_c = 30def test():print('test')def test2():print('test2')class Person:def __init__(self):self.name = '孙悟空'
然后,在另一个Python脚本中,我们可以引入该模块并使用其中定义的变量和函数:
# main.pyimport exampleprint(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__':来编写测试代码,只有当模块作为主模块运行时才会执行。
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.爬虫知识点总结复习
相关文章:
Python模块和包:sys模块、os模块和变量函数的使用
文章目录 模块(module)引入外部模块引入部分内容包 (package)示例代码开箱即用sys模块sys.argvsys.modulessys.pathsys.platformsys.exit() os模块os.environos.system()os模块中的变量、函数和类 测试代码模块中的变量和函数的使用 总结:pyt…...
计算机软件工程毕业设计题目推荐
文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题,难度适中,适合作为毕业设计,大家参考。 学长整理的题目标准: 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…...
嵌入式学习笔记(25)串口通信的基本原理
三根通信线:Tx Rx GND (1)任何通信都要有信息作为传输载体,或者有线的或则无线的。 (2)串口通信时有线通信,是通过串口线来通信的。 (3)串口通信最少需要2根ÿ…...
c++学习第十三
1)循环引用的案例及解决办法: #include <iostream> #include <memory> using namespace std; class A;class B { public:B(){cout<<"B constructor---"<<endl;}~B(){cout<<"B deconstructor----"<<endl;}std::weak_…...
java复习-线程的同步和死锁
线程的同步和死锁 同步问题引出 当多个线程访问同一资源时,会出现不同步问题。比如当票贩子A(线程A)已经通过了“判断”,但由于网络延迟,暂未修改票数的间隔时间内,票贩子B(线程B)…...
Qt指示器设置
目录 1. 样式设置 2. 行为设置 3. 交互设置 创建一个进度指示器控件 在Qt中设置指示器(Indicator)的外观和行为通常需要操作相关部件的属性和样式表。以下是如何在Qt中设置指示器的一些常见方式: 1. 样式设置 你可以使用样式表…...
计算机网络第四节 数据链路层
一,引入数据链路层的目的 1.目的意义 数据链路层是体系结构中的第二层; 从发送端来讲,物理层可以将数据链路层交付下来的数据,装换成光,电信号发送到传输介质上了 从接收端来讲,物理层能将传输介质的光&…...
Vue.js not detected解决方法
扩展程序》管理扩展程序》详情》允许访问文件地址打开...
Window10安装PHP7.4
1. 下载PHP 7 首先需要下载PHP 7的安装包,可以从PHP官网(https://www.php.net/downloads.php)或者Windows下的PHP官网(http://windows.php.net/download/)下载Windows版本的PHP 7安装包。根据自己的系统架构ÿ…...
【C++刷题】二叉树进阶刷题
根据二叉树创建字符串 class Solution { public:/** ()的省略有两种情况* 1.左右都为空,省略* 2.左子树不为空,右子树为空,省略*/string tree2str(TreeNode* root){string s;if(root nullptr){return s;}s to_string(root->val);if(root…...
有效的数独
有效的数独 题目: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。示例 1: 输…...
Vue导航守卫beforeRouteEnter,beforeRouteUpdate,beforeRouteLeave
Vue导航守卫以我自己的理解就是监听页面进入,修改,和离开的功能。每个守卫接受三个参数 to: Route: 即将要进入的目标路由对象 from: Route: 当前导航正要离开的路由 next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。 next(): 进行…...
小红书《乡村振兴战略下传统村落文化旅游设计》中南大许少辉八一新著
小红书《乡村振兴战略下传统村落文化旅游设计》中南大许少辉八一新著...
Android13 下拉菜单栏中添加快捷截图按钮
Android 13 原生系统下拉状态栏中是没有快捷截图按钮,现在需要添加快捷截图功能。 添加快捷截图功能后的效果图: 涉及修改的文件如下: modified: vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml modified: vendor/mediatek/proprietary/…...
GFS文件系统
GFS 分布式文件系统 GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。 由存储服务器、客户端以及NFS/Samba 存储网关(可选,根据需要选择使用)组成。 没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。 …...
22 相交链表
相交链表 题解1 快慢双指针改进 (acb bca)题解2 哈希表(偷懒) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 题目数据 保证 整个链式结构中不存在环。 注意ÿ…...
简历(快速上手)
简历 文章目录 简历简历模板:排版上:内容上:沟通上: 简历在面试中起到关键作用 网申,HR只会花10秒多来看一下 内推,如果简历没优势就只能pass 简历模板: ⽊及简历(推荐! ) : https://resume.mdedit.online 排版上: 尽量简洁,…...
wpf复制xaml及其cs窗体到其他项目 添加现有项,选 .xaml.cs,点添加即可。VS2022
添加现有项,选 LoadingWindow.xaml.cs,点添加即可。...
在线旅游平台步入新时代,携程如何走出自己的路?
今年旅游从线下到线上全方位火了。有统计数据,一季度,光是抖音,旅游达人发布视频数量就高达175万条,播放量1350亿次,收获27亿次点赞。在这一趋势下,许多“不出名”的景区和酒店借势抖音达人完成“出圈”。短…...
java中feign远程调用底层是用Hystrix作为熔断器吗?
在较新的版本中,Feign 默认使用 OpenFeign 作为远程调用的底层实现,并且集成了 Netflix Hystrix 作为熔断器。然而,需要注意的是,自 Feign 10.x 版本开始,默认已不再集成 Hystrix。 在 Feign 中,Hystrix 被…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
