Python之模块和包(九)
1、模块
1、模块概述
模块是一个包含了定义的函数和变量等的文件。模块可以被程序引入,以使用该模块中的函数等功能。通俗讲:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。
2、import
在Python中用关键字import来引入某个模块,语法如下:
import module1[, module2[,… module]
如:
import sys # 引入 python 标准库中的sys模块
print(sys.argv) # 是一个包含命令行参数的列表。
print(sys.path) # 包含了一个 Python 解释器自动查找所需模块的路径的列表
import math # 引入 python 标准库中的math模块
print(math.sqrt(2)) # 取平方根
print(dir()) # 内置函数 dir() 可以找到模块内定义的名称运行结果:
['E:/PycharmProjects/demo/2.py']
['E:\\PycharmProjects\\demo', 'E:\\PycharmProjects\\demo', 'E:\\pycharm\\python\\python\\python310.zip', 'E:\\pycharm\\python\\python\\DLLs', 'E:\\pycharm\\python\\python\\lib', 'E:\\pycharm\\python\\python', 'E:\\PycharmProjects\\demo\\venv', 'E:\\PycharmProjects\\demo\\venv\\lib\\site-packages']
1.4142135623730951
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'math', 'sys']
3、from…import
Python 的 from … import 语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:
from modname import name1[, name2[, … nameN]]
通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。把一个模块的所有内容全都导入到当前的命名空间,通过from modname import *
4、import…as
给导入的模块起别名
5、模块制作
1、定义自己的模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。比如有这样一个文件test.py,在test.py中定义了函数add:
def add(a, b):return a + b
2、掉用自己定义的模块
那么在其他文件中就可以先import test,然后通过test.add(a,b)来调用了,当然也可以通过from test import add来引入.
import test
result = test.add(1,2)
print(result)
3、name 属性
在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,例如:
def add(a, b):return a + b
# 用来进行测试
if __name__ == '__main__':result = add(1, 2)print('in test.py file,,,,1+2=%d'%result)
如果此时,在其他py文件中引入了此文件的话,测试的那段代码也会执行.
至此,可发现test.py中的测试代码,应该是单独执行test.py文件时才应该执行的,不应该是其他的文件中引用而执行.如果想在模块被引入时,模块中的某一程序块不执行,可以用__name__属性来使该程序块仅在该模块自身运行时执行。每个模块都有一个__name__属性,当其值是’main’时,表明该模块自身在运行,否则是被引入。
4、all 属性
模块若定义了__all__属性,则_all__内没有指定的属性、方法、类,不会被from xxx import *时导入。
2、包
包是一种管理 Python 模块命名空间的形式。包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹下创建一个名字为__init__.py 的文件,那么这个文件夹就称之为包。init.py控制着包的导入行为,可以在__init__.py文件中编写内容,当导入时,这些语句就会被执行。如:
使用import的方式导入:import inf.aa, inf.bb
使用from … import 的方式导入:from inf import *
注:在__init__.py文件中写入 all=[‘aa’,‘bb’]
3、模块发布
1、mymodule目录结构体如下:
2、编辑setup.py文件
py_modules需指明所需包含的py文件
from distutils.core import setup
setup(name='my', version='1.0', description='my module',author='yhm', py_modules=['inf.aa', 'inf.bb', 'msg.cc', 'msg.dd'])
3、构建模块
python setup.py build
4、生成发布压缩包
python setup.py sdist
打包后,生成最终发布压缩包
4、模块安装、使用
1、模块的安装
找到模块的压缩包->解压->进入文件夹->执行命令python setup.py install
注意:如果在install的时候,执行目录安装,可以使用python setup.py install --prefix=安装路径
2、模块的引入
在程序中,使用from…import 即可完成对安装的模块使用
from 模块名 import 模块名或者*
from inf import *
from msg import *
aa.showaa()
bb.showbb()
cc.showcc()
dd.showdd()运行结果:
aa中的showaa方法
bb中的showbb方法
cc中的showcc方法
dd中的showdd方法
5、常用模块
os 模块用来提供处理文件和目录
random 模块用于生成随机数
random.random() # 用于生成一个0到1的,随机浮点数:0<= n < 1.0
random.randint(a, b) # 用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
import random
print(random.random())
print(random.randint(1, 10))运行结果:
0.01071939687026413
1
math 模块提供了许多数学运算函数
import math
print(math.pi) # 数字常量,圆周率
print(math.ceil(2.7)) # 取大于等于x的最小的整数值,如果x是一个整数,则返回x
print(math.floor(2.7)) # 取小于等于x的最大的整数值,如果x是一个整数,则返回自身
print(math.pow(2, 3)) # 返回x的y次方,即x**y
print(math.sqrt(4)) # 求x的平方根运行结果:
3.141592653589793
3
2
8.0
2.0
time、datetime模块和 calendar 模块可以处理日期和时间
time模块
import time # 引入time模块
ticks = time.time()
print("当前时间戳为:", ticks) # 时间戳单位最适于做日期运算运行结果:
当前时间戳为: 1683098627.4018276
1、获取当前时间,将时间戳传递给如localtime之类的函数
import time
localtime = time.localtime(time.time())
print("本地时间为 :", localtime)运行结果:
本地时间为 : time.struct_time(tm_year=2023, tm_mon=5, tm_mday=3, tm_hour=15, tm_min=27, tm_sec=21, tm_wday=2, tm_yday=123, tm_isdst=0)
struct_time元组。这种结构具有如下属性:
2、获取格式化的时间
可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime():
import time
localtime = time.asctime(time.localtime(time.time()))
print("本地时间为 :", localtime)运行结果:
本地时间为 : Wed May 3 15:32:30 2023
3、格式化日期
可以使用 time 模块的 strftime 方法来格式化日期:
import time
# 格式化成yyyy-mm-dd hh:mm:ss形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 格式化成 星期几 几月 几号 时:分:秒 年 形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
# 将格式字符串转换为时间戳
a = "Wed May 03 15:36:18 2023"
print(time.mktime(time.strptime(a, "%a %b %d %H:%M:%S %Y")))运行结果:
2023-05-03 15:38:28
Wed May 03 15:38:28 2023
1683099378.0
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(0000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
datetime模块
1、获取当前日期和时间
from datetime import datetime
now = datetime.now()
print(now)
print(type(now))运行结果:
2023-05-03 15:42:52.776138
<class 'datetime.datetime'>
注:datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。如果仅导入import datetime,则必须引用全名datetime.datetime。datetime.now()返回当前日期和时间,其类型是datetime。
2、获取指定日期和时间
要指定某个日期和时间,我们直接用参数构造一个datetime:
from datetime import datetime
dt = datetime(2023, 5, 3, 12, 40, 12)
print(dt)
print(type(dt))运行结果:
2023-05-03 12:40:12
<class 'datetime.datetime'>
把一个datetime类型转换为timestamp只需要简单调用timestamp()方法:
from datetime import datetime
dt = datetime(2023, 5, 3, 12, 40, 12)
print(dt.timestamp())运行结果:
1683088812.0
要把timestamp转换为datetime,使用datetime提供的fromtimestamp()方法:
from datetime import datetime
t = 1683088812.0
print(datetime.fromtimestamp(t))运行结果:
2023-05-03 12:40:12
datetime与str的转换
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))运行结果:
2023-05-03 15:52:49
calendar 模块
import calendar
# 打印2023年的日历
# print(calendar.calendar(2023))
# 打印2023年5月的日历
# print(calendar.month(2023, 5))
# 判断是否是闰年
print(calendar.isleap(2023))
# 返回元组,两个整数。第一个是该月的第一天是星期几(星期几是从0(星期一) 到 6(星期日)),第二个是该月的总天数
print(calendar.monthrange(2023, 5))
# 返回星期几(0(星期一)到6(星期日))
print(calendar.weekday(2023, 5, 3))运行结果:
False
(0, 31)
2
相关文章:

Python之模块和包(九)
1、模块 1、模块概述 模块是一个包含了定义的函数和变量等的文件。模块可以被程序引入,以使用该模块中的函数等功能。通俗讲:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。 2、import 在P…...

C++-----动态规划
目录 一、动态规划的基本思想 二、设计动态规划法的步骤 三、动态规划问题的特征 4.1 矩阵连乘积问题 4.1.1 分析最优解的结构 4.1.2 建立递归关系 4.1.3 计算最优值 4.1.3 计算最优值 4.1.3 构造最优解 4.2 动态规划算法的基本要素 4.2.1 最优子结构 4.2.2 重叠子问题 …...

2.2 Linux控制台访问CLI
系列文章目录 第1章 Linux Shell简介 第2章 Shell基础 <本章所在位置> 第3章 Bash Shell基础命令 第4章 Bash Shell命令进阶 第5章 Linux Shell深度理解 第6章 Linux环境变量 第7章 Linux文件权限 第8章 Linux文件系统的管理 第9章 Linux软件安装 第10章 Linux文本编辑器…...
代码随想录补打卡 509 斐波那契数列
代码如下 //斐波那契数列的第0项是0 第一项是1 func fib(n int) int { if n < 1 { return n } dp : make([]int,n1) dp[0] 0 dp[1] 1 for i : 2 ; i < n ; i { dp[i] dp[i-1] dp[i-2] } return dp[n] } 70 爬楼梯 代码如下 func climbStairs(n int) int …...
【每日一题Day195】LC1003检查替换后的词是否有效 | 栈
检查替换后的词是否有效【LC1003】 给你一个字符串 s ,请你判断它是否 有效 。 字符串 s 有效 需要满足:假设开始有一个空字符串 t "" ,你可以执行 任意次 下述操作将 t 转换为 s : 将字符串 "abc" 插入到 t…...

简单理解什么是序列化
为什么要序列化 序列化的目的就是为了对象可以在网络层进行传输, 比如通过后端传给前端数据。 什么是序列化 我们以Java为例。 序列化就是把对象转化为可传输的字节序列过程,这个字节序列可以是字符串,比如JSON格式的字符串,把…...

Django初识
1、简介 Django,是用python语言写的开源web开发框架,并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架,于2005年7月在BSD许可证下发布。这个名称来源于比利时的爵士音乐家DjangoReinhardt&#…...

ARM嵌入式编译器-volatile关键字对编译器优化的影响
volatile限定符告知计算机,其他agent(而不是变量所在的程序)可以改变该变量的值。通常它被用于硬件地址以及在其他程序或同时运行的线程中共享数据。要求编译器不要对其描述的对象作优化处理,对它的读写都需要从内存中访问。 使用…...

销售数据分析怎么做?这篇文章说清楚了
如何分析销售数据?分析销售数据有哪些指标?销售数据分析有什么作用? 销售数据是不是得通过数据分析软件啊? 本文将为您解答疑惑—— 一、分析销售数据的指标 从两个层面上来讲,一个是对销售情况的整体把控…...

二十六、ISIS技术总结
文章目录 ISIS 概述一、路由协议总结1、路由优先级2、分类 二、ISIS 协议特点1、特点2、ISIS 路由器的种类 三、ISIS 配置1、基础配置2、network-entity含义3、router id 和系统id转换规则 四、ISIS 开销计算1、Narrow 模式2、Wide 模式 五、 ISIS 和 OSPF 的区别 ISIS 概述 I…...
三菱m70 m80系统解密 三菱m80机床到期解锁
我们从操作系统的发展讲起,为什么要有线程这个概念出现。《Java多线程学习笔记(一) 初遇篇》讲Java平台下的线程,如何使用和创建,以及引入线程后所面临的问题,为了解决线程安全问题,Java引入的机制,这也是《…...

InnoDB 磁盘结构之数据字典和双写缓冲区
数据字典(InnoDB Data Dictionary) MySQL中,数据字典包括了: 表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、MySQL版本信息、存储过程、触发器等内容 InnoDB数据字典由内部系统表组成,这些表包含用于查找表…...
Django模型层part two - 多表关系创建和多表操作
前言 继续上面一篇文章的内容,本文介绍多表操作。使用django ORM可以创建多表关系,并且也支持多张表之间的操作,以创建表关系和查询两部分说明django ORM的多表操作。以作者、图书、出版社和作者信息几张表作为案例进行说明。 创建表关系 …...

智能优化算法:浣熊优化算法-附代码
智能优化算法:浣熊优化算法 文章目录 智能优化算法:浣熊优化算法1.浣熊优化算法1.1 初始化1.2 阶段一:狩猎和攻击(探索阶段) 2.实验结果3.参考文献4. Matlab 摘要:浣熊优化算法(Coati Optimizat…...

【51单片机】数码管显示(样例展示以及异常分析)
🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 ⭐数码管 比如要显示“6”,那么下面图片中,AFEDCG=1,B=0 对应到数码管上,就是 ⭐原理 🎊P22~P24控制LED1~...
Android InputChannel事件发送接收系统分析
本文基于Android12。 InputChannel表示其他进程通过文件描述符传递输入事件到View的通道,因为需要跨进程传输,实现了Parcelable序列化接口,所以也能够理解Java层的InputChannel后面为什么使用copyTo()方法初始化。 输入事件的接收方是View&…...
Java时间类(五)-- LocalDate()类
目录 引言: 1. LocalDate的概述: 2. LocalDate的常用方法: 引言: (1)Date存在的缺陷: 如果不格式化,打印出的日期可读性差://获取当前时间Date date = new Date();System.out.println("date = " + date); //date = Wed May 03 22:30:24 CST...

用手机号码归属地 API 开发的应用推荐
引言 手机号码归属地 API是一种提供手机号码归属地信息的接口,通过该接口,可以获取手机号码所属的省份、城市、运营商等信息。它可以帮助企业更好地了解客户,为个性化推荐和精准广告投放提供数据支持。作为一种数据服务,手机号码…...

测试从业第 3 年,我看到了终点......
先说明,今天的内容,是写给想成为高级测试开发、自动化测试专家的人看的,因为,它可能颠覆你的认知。 众所周知,如今无论是大厂还是中小厂,自动化测试基本是标配了,毕竟像双11、618 这种活动中庞…...
结巴分词原理分析
结巴分词器工作原理 结巴分词是一款python写成的开源中文分词器,分词过程大致如下: 首先,结巴使用正则表达式将输入文本切割成若干中文块,接着对每个中文块B做处理,将B转成有向无环图(DAG)。DAG是以{key:list[i,j...…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...