当前位置: 首页 > news >正文

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、模块概述 模块是一个包含了定义的函数和变量等的文件。模块可以被程序引入&#xff0c;以使用该模块中的函数等功能。通俗讲&#xff1a;模块就好比是工具包&#xff0c;要想使用这个工具包中的工具(就好比函数)&#xff0c;就需要导入这个模块。 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 &#xff0c;请你判断它是否 有效 。 字符串 s 有效 需要满足&#xff1a;假设开始有一个空字符串 t "" &#xff0c;你可以执行 任意次 下述操作将 t 转换为 s &#xff1a; 将字符串 "abc" 插入到 t…...

简单理解什么是序列化

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

Django初识

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

ARM嵌入式编译器-volatile关键字对编译器优化的影响

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

销售数据分析怎么做?这篇文章说清楚了

如何分析销售数据&#xff1f;分析销售数据有哪些指标&#xff1f;销售数据分析有什么作用&#xff1f; 销售数据是不是得通过数据分析软件啊&#xff1f; 本文将为您解答疑惑—— 一、分析销售数据的指标 从两个层面上来讲&#xff0c;一个是对销售情况的整体把控&#xf…...

二十六、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机床到期解锁

我们从操作系统的发展讲起&#xff0c;为什么要有线程这个概念出现。《Java多线程学习笔记(一) 初遇篇》讲Java平台下的线程&#xff0c;如何使用和创建&#xff0c;以及引入线程后所面临的问题&#xff0c;为了解决线程安全问题&#xff0c;Java引入的机制&#xff0c;这也是《…...

InnoDB 磁盘结构之数据字典和双写缓冲区

数据字典&#xff08;InnoDB Data Dictionary&#xff09; MySQL中&#xff0c;数据字典包括了: 表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、MySQL版本信息、存储过程、触发器等内容 InnoDB数据字典由内部系统表组成&#xff0c;这些表包含用于查找表…...

Django模型层part two - 多表关系创建和多表操作

前言 继续上面一篇文章的内容&#xff0c;本文介绍多表操作。使用django ORM可以创建多表关系&#xff0c;并且也支持多张表之间的操作&#xff0c;以创建表关系和查询两部分说明django ORM的多表操作。以作者、图书、出版社和作者信息几张表作为案例进行说明。 创建表关系 …...

智能优化算法:浣熊优化算法-附代码

智能优化算法&#xff1a;浣熊优化算法 文章目录 智能优化算法&#xff1a;浣熊优化算法1.浣熊优化算法1.1 初始化1.2 阶段一&#xff1a;狩猎和攻击&#xff08;探索阶段&#xff09; 2.实验结果3.参考文献4. Matlab 摘要&#xff1a;浣熊优化算法&#xff08;Coati Optimizat…...

【51单片机】数码管显示(样例展示以及异常分析)

🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 ⭐数码管 比如要显示“6”,那么下面图片中,AFEDCG=1,B=0 对应到数码管上,就是 ⭐原理 🎊P22~P24控制LED1~...

Android InputChannel事件发送接收系统分析

本文基于Android12。 InputChannel表示其他进程通过文件描述符传递输入事件到View的通道&#xff0c;因为需要跨进程传输&#xff0c;实现了Parcelable序列化接口&#xff0c;所以也能够理解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是一种提供手机号码归属地信息的接口&#xff0c;通过该接口&#xff0c;可以获取手机号码所属的省份、城市、运营商等信息。它可以帮助企业更好地了解客户&#xff0c;为个性化推荐和精准广告投放提供数据支持。作为一种数据服务&#xff0c;手机号码…...

测试从业第 3 年,我看到了终点......

先说明&#xff0c;今天的内容&#xff0c;是写给想成为高级测试开发、自动化测试专家的人看的&#xff0c;因为&#xff0c;它可能颠覆你的认知。 众所周知&#xff0c;如今无论是大厂还是中小厂&#xff0c;自动化测试基本是标配了&#xff0c;毕竟像双11、618 这种活动中庞…...

结巴分词原理分析

结巴分词器工作原理 结巴分词是一款python写成的开源中文分词器&#xff0c;分词过程大致如下&#xff1a; 首先&#xff0c;结巴使用正则表达式将输入文本切割成若干中文块&#xff0c;接着对每个中文块B做处理&#xff0c;将B转成有向无环图(DAG)。DAG是以{key:list[i,j...…...

JavaEE 第三-四周

计算机Z20-第3-4周作业 总分&#xff1a;100分 得分&#xff1a;74.2分 1 . 填空题 简单 5分 在web.xml文件中&#xff0c;<url-pattern>/xxxxServlet</url-pattern>中的第一个‘/’表示__________。 学生答案 当前web应用程序的根目录 2 . 填空题 简…...

Ububtu20.04 无法连接外屏(显卡驱动问题导致)

Ububtu20.04 无法显示第二个屏幕&#xff08;显卡驱动问题&#xff09; Ububtu20.04 无法显示第二个屏幕&#xff08;显卡驱动问题&#xff09; Ububtu20.04 无法显示第二个屏幕&#xff08;显卡驱动问题&#xff09; 1. 问题描述2. 解决方案 1. 问题描述 一开始我的ububt…...

配置JDK环境变量

文章目录 查看电脑系统下载及安装JavaSE配置系统环境变量测试环境变量配置是否成功。 查看电脑系统 运行输入框中输入&#xff1a;control 下载及安装JavaSE 这个从网上下载就行&#xff0c;jdk-8u141-windows-x64.exe&#xff0c;不提供下载方式了。 主要讲解安装过程&a…...

保护移动设备免受恶意软件侵害优秀方法

几天前&#xff0c;移动恶意软件攻击增加了500%显然&#xff0c;我们大多数人都不知道不能很好地保护我们的手机下面小编揭秘有效保护移动设备免受恶意软件侵害的最佳方法。 1、使用移动反恶意软件 恶意软件很容易感染智能手机和平板电脑&#xff0c;因此在设备上安装可靠的…...

一个人在家怎么赚钱?普通人如何通过网络实现在家就能赚钱

近年来&#xff0c;随着互联网的飞速发展&#xff0c;嗅觉敏锐的人只要使用互联网就可以快乐地赚钱。一般来说&#xff0c;网上赚钱的投资较少&#xff0c;有时有一台能上网的电脑或手机就够了&#xff0c;所以大家有时称其为“无成本或低成本网赚”。今天就分享一个人在家如何…...

ChatGPT诞生的新岗位:提示工程师(Prompt Engineer)

ChatGPT诞生的新岗位&#xff1a;提示工程师&#xff08;Prompt Engineer&#xff09; Prompt 工程师是什么? 是识别人工智能的错误和隐藏功能&#xff0c;以便开发者可以对这些发现进行处理。 如果你正在寻找科技领域最热门的工作&#xff0c;你可以尝试了解如何与AI聊天机…...

机器学习笔记 使用PPOCRLabel标注自己的OCR数据集

一、PPOCRLabel的安装 最简单的方式就是直接pip安装,如下命令。 pip install PPOCRLabel -i https://pypi.douban.com/simple/ 运行的时候,直接激活安装了PPOCRLabel的环境后,输入PPOCRLabel回车即可运行,不过PPOCRLabel依赖PyQt5,所以会要求安装PyQt5,按要求安装或者提前…...

【C++初阶】类和对象(二)

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C初阶】…...

深入探讨Java、Spring和Dubbo的SPI机制

在Java开发领域中&#xff0c;SPI&#xff08;Service Provider Interface&#xff09;是一种用于实现框架扩展的机制。Java本身提供了SPI机制&#xff0c;Spring和Dubbo也都有自己的SPI机制。本文将介绍Java、Spring、Dubbo三者SPI机制的原理和区别。 一、Java SPI机制 Java…...

使用机器人为无线传感器网络提供服务(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 无线传感器网络是一种无线网络&#xff0c;包括大量循环的、自定向的、微小的、低功耗的设备&#xff0c;称为传感器节点&…...

外贸网站建设推广优化/国内seo公司

背景 首先我是个菜鸡&#xff0c;工资也低的一笔。 刚毕业时候在一家国企上班干 app 开发&#xff0c;干了快两年的时候&#xff0c;跳槽到了一家伪大厂干安全。投了不少简历都没有回音&#xff0c;只有这加伪大厂要我就来了。当时说好了会接触一些底层的东西&#xff0c;然而…...

wordpress 粘贴代码/seo海外推广

图片右边加两行文字 先来一个效果图&#xff1a; 下面来看代码 wxml <view class"view_tupian_wenzi"><image class"image_1" src"../images/main_yewu.png" /><view class"view_wenzi2"><text>服务项目&l…...

精通网站建设 100/seo搜索引擎优化就业前景

我不喜欢被当今互联网产业吹嘘到比冥王哈迪斯还该死的所谓业务逻辑&#xff0c;我只喜欢机器本身&#xff0c;所以我不会编程&#xff0c;是的&#xff0c;这是报应。 我只会C语言和汇编&#xff0c;但是并不很。 但我觉得C语言编译器自动生成的那些push RBP之类的指令简直糟…...

h5怎么制作小程序/手机360优化大师官网

世界上第一台电子计算机研制成功的时间是A .1936B.1956C.1946D.1975世界上第一台电子数字式计算机的A.ENDAC B.ENIACC.UNIVAC D.EDVAC被称为计算机之父的是A .艾伦?图灵 B . 查尔斯?巴贝奇C .罗伯特?诺伊斯D . 冯?诺依曼世界上第一台电子计算机于多少年研制成功A.1976B .19…...

备案网站/优化网站seo

2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1959 Solved: 1229[Submit][Status][Discuss]Description Longge的数学成绩非常好&#xff0c;并且他非常乐于挑战高难度的数学问题。现在问题来了&#xff1a;给定一个整数N&#xff0c;你需要…...

网站建设服务器篇/教育培训班

String的hashcode()方法 public int hashCode() {int h hash;if (h 0 && value.length > 0) {char val[] value;for (int i 0; i < value.length; i) {h 31 * h val[i];}hash h;}return h;}​ 选择31是因为可以用移位和减法运算来代替乘法&#xff0c;从而…...