Python之模块和包(九)

news2024/10/1 3:30:31

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis分布式锁原理之实现秒杀抢优惠卷业务

Redis分布式锁原理之实现秒杀抢优惠卷业务 1. 实现秒杀下单2. 库存超卖问题分析2.1 乐观锁解决超卖问题 3. 优惠券秒杀-一人一单3.1 集群环境下的并发问题 4、分布式锁4.1 基本原理和实现方式对比4.2 Redis分布式锁的实现核心思路4.3 实现分布式锁版本一4.4 Redis分布式锁误删情…

【Java入门合集】第三章面向对象编程(上)

【Java入门合集】第三章面向对象编程&#xff08;上&#xff09; 博主&#xff1a;命运之光 专栏&#xff1a;JAVA入门 理解面向对象三大主要特征&#xff1b; 掌握类与对象的区别与使用&#xff1b; 掌握类中构造方法以及构造方法重载的概念及使用&#xff1b; 掌握包的定义、…

国民技术N32G430开发笔记(14)-IAP升级 usart2接收数据

IAP升级 Usart2接收数据 1、之前有一节我们将PA6 PA7复用成了usart2的功能&#xff0c;这一节我们用usart2接收来自树莓派的升级请求&#xff0c;然后完成N32G430的Iap升级。 2、接线 PA9 PA10 接usb转串口模块A&#xff0c;A模块插入电脑。 PA6 PA7 接usb转串口模块B&#xf…

【移动端网页布局】流式布局案例 ⑥ ( 多排按钮导航栏 | 设置浮动及宽度 | 设置图片样式 | 设置文本 )

文章目录 一、多排按钮导航栏样式及核心要点1、实现效果2、总体布局设计3、设置浮动及宽度4、设置图片样式5、设置文本 二、完整代码实例1、HTML 标签结构2、CSS 样式3、展示效果 一、多排按钮导航栏样式及核心要点 1、实现效果 要实现下面的导航栏效果 ; 2、总体布局设计 该导…

计算机网络笔记:DNS域名解析过程

基本概念 DNS是域名系统&#xff08;Domain Name System&#xff09;的缩写&#xff0c;也是TCP/IP网络中的一个协议。在Internet上域名与IP地址之间是一一对应的&#xff0c;域名虽然便于人们记忆&#xff0c;但计算机之间只能互相认识IP地址&#xff0c;域名和IP地址之间的转…

基于探路者算法的极限学习机(ELM)回归预测-附代码

基于探路者算法的极限学习机(ELM)回归预测 文章目录 基于探路者算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于探路者算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;本文利用探路者算法对极限学习机进行优化&…

算法 DAY45 动态规划07 70. 爬楼梯 322. 零钱兑换 279. 完全平方数 139. 单词拆分 多重背包

70. 爬楼梯 和377. 组合总和 Ⅳ (opens new window)基本就是一道题了。本题代码不长&#xff0c;题目也很普通&#xff0c;但稍稍一进阶就可以考察完全背包 class Solution { public:int climbStairs(int n) {vector<int> nums {1,2};vector<int> dp(n1,0);dp[0…

while语句和until语句顺便带点小实验

while语句和until语句 一、while用法二、Until循环语句三、趣味小实验猜价格的游戏&#xff08;价格是随机数&#xff09;写一个计算器脚本闲来无事去购物 一、while用法 for循环语句非常适用于列表对象无规律&#xff0c;且列表来源以固定&#xff08;如某个列表文件&#xf…

Android Studio开发图书管理系统APP

Android Studio开发项目图书管理系统项目视频展示&#xff1a; 点击进入图书管理系统项目视频 引 言 现在是一个信息高度发达的时代&#xff0c;伴随着科技的进步&#xff0c;文化的汲取&#xff0c;人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴…

word构建基块:快速插入重复内容的高级剪切板

本文参考自 word录入技巧&#xff1a;如何用自动图文集快速插入重复内容 - 知乎 介绍 构建基块&#xff0c;它就是和剪切板一样&#xff0c;点一下就粘贴一份新的&#xff0c;用于解决大量重复内容的复制粘贴 构建基块包括自动图文集和快速表格&#xff0c;实际上都是构建基块…

Blender启动场景的修改

Blender启动场景的修改 1 使用版本2 现象描述3 解决方法4 启动场景路径5 清理场景资源5.1 空场景大小5.2 清理图片资源5.2.1 断开数据块关联5.2.2 断开伪用户关联5.2.3 断开多用户关联5.2.4 清理数据块5.2.6 文件校验 5.3 使用自建资源库 6 数据块类型 1 使用版本 Blender 3.3…

二叉树建立、遍历、打印(23春教学)

#include<stdio.h> #include <malloc.h> #include <conio.h> typedef char DataType; typedef struct Node {DataType data;struct Node *LChild;struct Node *RChild; }BitNode,*BitTree; void CreatBiTree(BitTree *bt)//用扩展先序遍历序列创建二叉树&am…

《LearnUE——基础指南:上篇—3》——GamePlay架构WorldContext,GameInstance,Engine之间的关系

目录 平行世界是真实存在的吗&#xff1f; 1.3.1 引言 1.3.2 世界管理局&#xff08;WorldContext&#xff09; 1.3.3 司法天神&#xff08;GameInstance&#xff09; 1.3.4 上帝&#xff08;Engine&#xff09; 1.4 总结 平行世界是真实存在的吗&#xff1f; 1.3.1 引言 …

DAY 51 LVS负载均衡——DR模式

数据包流向分析 &#xff08;1&#xff09;客户端发送请求到Director Server (负载均衡器)&#xff0c;请求的数据报文&#xff08;源IP是CIP&#xff0c;目标IP是VIP&#xff09;到达内核空间。 &#xff08;2&#xff09;Director Server 和Real Server 在同一个网络中&…

【五一创作】ERP实施-委外业务-委外采购业务

委外业务主要有两种业务形态&#xff1a;委外采购和工序外协&#xff0c;委外采购主要是在MM模块中实现&#xff0c;工序外协主要由PP模块实现&#xff0c;工序外协中的采购订单创建和采购收货由MM模块实现。 委外采购概念 委外采购&#xff0c;有些企业也称为带料委外或者分包…

【Spring框架全系列】方法注解@Bean的使用

&#x1f4ec;&#x1f4ec;哈喽&#xff0c;大家好&#xff0c;我是小浪。上篇博客我们介绍了五大类注解的使用方法&#xff0c;以及如何解决Spring使用五大类注解生成bean-Name的问题&#xff1b;那么&#xff0c;谈到如何更简单的读取和存储对象&#xff0c;这里我们还需要介…

如何防止系统发生异常时,别人传递过来的关键数据不丢失?(AOP + xxlJob)

需求 在开发中&#xff0c;客户每天需要定时调用我们的api去上传一些数据到数据库中&#xff0c;当数据库发生异常或者系统发生异常&#xff0c;上传的一些数据会丢失不做入库操作&#xff0c;现想防止数据库或系统发生异常&#xff0c;数据能不丢失&#xff0c;同时&#xff…

TryHackMe-AD证书模板

AD Certificate Templates SpecterOps 完成并作为白皮书发布的研究表明&#xff0c;可以利用配置错误的证书模板进行权限提升和横向移动。根据错误配置的严重性&#xff0c;它可能允许 AD 域上的任何低特权用户只需单击几下即可将其权限提升为企业域管理员的权限&#xff01; …

C语言宏使用

C语言宏 编译一个C语言程序的第一步骤就是预处理阶段&#xff0c;这一阶段就是宏发挥作用的阶段,编译完之后宏对二进制代码不可见。 使用 1. 宏常量 #define PI 3.142. 宏语句 #define Print printf("hello,world!\r\n")3. 宏函数 使用宏来定义函数&#xff0c…

基于灰狼算法的极限学习机(ELM)回归预测-附代码

基于灰狼算法的极限学习机(ELM)回归预测 文章目录 基于灰狼算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于灰狼算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;本文利用灰狼算法对极限学习机进行优化&#xff0c;并…