Python入门-模块

1.什么是模块?

  • 在Python中一个后缀名为 .py 的Python文件就是一个模块
  • 模块中可以定义函数、类等
  • 模块也可以避免函数、类、变量等名称相冲突的问题
  • 模块不仅提高了代码的可维护性,同时还提高了代码的可重用性
  • 在给模块命名的时候要求全部使用小写字母,多个单次之间使用下划线进行分隔
  • 如果自定义模块名称的与系统内置模块名称相同,那么在导入时会优先导入自定义的模块

(就和Java中导入一个类是一个概念)
在这里插入图片描述

1.1 自定义模块

新建 python 文件 my.info.py

name='Jarvis'
def info():
    print(f'大家好我叫{name}')

这样一个自定义模块就定义好了

1.2 模块的导入

在这里插入图片描述

import my_info

print(my_info.name)
my_info.info()

模块起别名

import my_info as a

print(a.name)
a.info()

from…import 方式

from my_info import name  # 导入的事一个具体的变量的名称

print(name)

from my_info import info  # 导入的事一个具体的函数的名称

info()

通配符

from my_info import *

print(name)
info()

同时导入多个模块

import math,time,random

如果两个模块,具有相同的函数和变量?

那么后导入的模块会覆盖先导入的模块!!

我们来看测试:

再新建一个模块: introduce.py

name='zhangsan'
age=18

def info():
    print(f'姓名:{name},年龄:{age}')

这里面的方法 info 、属性name 和 之前的 my_info 一样

from my_info import *
from introduce import *

#导入模块中具有同名的变量和函数,后导入的会将之间导入的进行覆盖
info()

运行结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\示例10-4模块的导入.py 
姓名:zhangsan,年龄:18

后导入的那个模块的内容,就覆盖掉了先导入的

如果不想覆盖,解决方案,可以使用 import

使用模块中的函数或变量时,模块名打点调用

import my_info
import introduce

# 使用模块中的函数或变量时,模块名打点调用
my_info.info()
introduce.info()

运行结果:

大家好我叫Jarvis
姓名:zhangsan,年龄:18

2.Python中的 包

在这里插入图片描述

悬停在目录,鼠标右键-—new----Python Package

新建一个 admin 的包,就会出现一个 初始化文件

在这里插入图片描述
可以在 这个初始化文件写东西,也可以不写。

但我写了点儿,可以把这个包的版权内容写在里面

print('版权:Jarivs')
print('Java Senior Development Engineer')

在这个 admin 包里新建文件 my_admin.py

def info():
    print('大家好,我叫Jarvis,今年25岁')

name='zhangsan'

2.1 包的导入

包名.模块名

import admin.my_admin as a  # 包名.模块名  admin是包名, my_admin 是模块名
a.info()

运行结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\示例10-7包的导入.py 
版权:Jarivs
Java Senior Development Engineer
大家好,我叫Jarvis,今年25

可以看到 初始化文件里面的内容 也打印输出了,
所以包被导入的时候, init.py 文件里面的代码会被自动被调用执行

from 包名 import模块 as 别名

from admin import my_admin as b  # from 包名 import模块 as 别名
b.info()   # __init__里面的方法就不会再执行了,只会执行一次

运行结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\示例10-7包的导入.py 
版权:Jarivs
Java Senior Development Engineer
大家好,我叫Jarvis,今年25--------------------------------------------------------------------------------
大家好,我叫Jarvis,今年25

可以看到 init.py 文件里面的代码只会输出一次

from 包名.模块名 import 函数/变量

from admin.my_admin import info   #from 包名.模块名 import 函数/变量 等
info()

运行结果:

大家好,我叫Jarvis,今年25

2.2 主程序运行

新建两个模块:

module_a:

print('welcome to Beijing')
name='Jarvis'
print(name)

新建 module_b,导入 module_a

# 导入的代码
import module_a

运行 module_b,可以看到直接就输出了 导入 module_a的内容

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\module_b.py 
welcome to Beijing
Jarvis

如果不希望module_a 里面的内容不随着导入输出呢??

我们修改 module_a 里面的代码:

if __name__ == '__main__':
    print('welcome to Beijing')
    name = 'Jarvis'
    print(name)

这个时候就发现 module_a 里面的代码不会随着 导入被运行

主程序运行的作用:能阻止全局变量的数据被输出执行

3.Python中常用的内置模块

在这里插入图片描述
这些模块在哪儿呢?我们可以找一下

去到我们Python解释器的安装位置的 目录:
在这里插入图片描述
右键打开文件位置
在这里插入图片描述
再鼠标悬停这个,再右键打开文件位置:
在这里插入图片描述
可以看到Lib目录

在这里插入图片描述
可以看到之前我们用到过的 random 模块

3.1 random模块

在这里插入图片描述

import random
# 设置随机数的种子
random.seed(10)

print(random.random())  # [0.0,1.0)
print(random.random())  #为什么多次运行,随机数结果是一样的呢?? 因为 种子 seed设置的值 相同

为什么多次运行,随机数结果是一样的呢?? 因为 种子 seed设置的值 相同!!

random.seed(10)
print(random.randint(1,100))  #[1,100]

print('-'*40)

for i in range(10): # [m,n) 步长为k, m-->start-->1 n-->stop-->10 k-->step -->
    print(random.randrange(1,10,3))  #这行代码执行了 10 次

print('-'*40)

print(random.uniform(1,100))  #[a,b]随机小数

lst=[i for i in range(1,11)]
print(lst)
print(random.choice(lst))  # lst是列表,称为序列

print('-'*40)

#随机的排序
random.shuffle(lst)
print(lst)

3.2 time模块

在这里插入图片描述
在这里插入图片描述

import time

now = time.time()
print(now)

obj = time.localtime()  # struct_time对象
print(obj)

obj2 = time.localtime(60)  # 60秒 1970年,1月1日.8时.1分.0秒
print(obj2)
print(type(obj2))  # <class 'time.struct_time'>

print('年份:', obj2.tm_year)
print('月份:', obj2.tm_mon)
print('日期', obj2.tm_mday)
print('时:', obj2.tm_hour)
print('分:', obj2.tm_min)
print('秒', obj2.tm_sec)
print('星期', obj2.tm_wday)  # [0,6] ,3 表示星期四,2表示的是星期三
print('今年的多少天', obj2.tm_yday)

print(time.ctime())  # 时间戳对应的易读的字符串 Tue Jan 16 10:04:01 2024

# 日期时间格式化
print(time.strftime('%Y-%m-%d', time.localtime()))  # str -->字符串f  -->format-->time时间
print(time.strftime('%H:%M:%S', time.localtime()))
print('%B月份的名称', time.strftime('%B', time.localtime()))
print('%A星期的名称', time.strftime('%A', time.localtime()))

# 字符串转成 struct_time
print(time.strptime('2008-08-08','%Y-%m-%d'))

time.sleep(10)
print('Hello World')

运行结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\示例10-12time模块.py 
1705384179.8378778
time.struct_time(tm_year=2024, tm_mon=1, tm_mday=16, tm_hour=13, tm_min=49, tm_sec=39, tm_wday=1, tm_yday=16, tm_isdst=0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=1, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
<class 'time.struct_time'>
年份: 1970
月份: 1
日期 1: 8: 10
星期 3
今年的多少天 1
Tue Jan 16 13:49:39 2024
2024-01-16
13:49:39
%B月份的名称 January
%A星期的名称 Tuesday
time.struct_time(tm_year=2008, tm_mon=8, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=221, tm_isdst=-1)

3.3 datetime 模块

在这里插入图片描述

from datetime import datetime  # 从datetime模块中 导入 datetime 类

dt=datetime.now()
print('当前的系统时间为',dt)

# datetime是一个类,手动创建这个类的对象
dt2=datetime(2008,8,8,20,8)
print('dt2的数据类型',type(dt2),'dt2表示的日期时间',dt2)
print('年:',dt2.year,'月:',dt2.month,'日:',dt2.day)
print('时:',dt2.hour,'分:',dt2.minute,'秒:',dt2.second)


# 比较两个 datetime类型对象的大小
labor_day=datetime(2028,5,1,0,0,0)

national_day=datetime(2028,10,1,0,0,0)
print('2028年5月1日比2028年10月1日早吗?',labor_day<national_day)  # True

# datetime类型与字符串进行转换
nowdt=datetime.now()
nowdt_str=nowdt.strftime('%Y/%m/%d %H:%M:%S')
print('nowdt的数据类型:',type(nowdt),'nowdt表示的数据是什么?',nowdt)
print('nowdt_str:',type(nowdt_str),'nowdt_str表示的数据是什么?',nowdt_str)


# 字符串类型转成 datetime类型
str_datetime='2028年8月8日 20点8分'
dt3=datetime.strptime(str_datetime,'%Y年%m月%d日 %H点%M分')
print('str_datetime数据类型',type(str_datetime),'str_datetime表示的数据:',str_datetime)
print('dt3数据类型',type(dt3),'dt3表示的数据:',dt3)

运行结果:

D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap10\示例10-13datetime模块.py 
当前的系统时间为 2024-01-16 13:53:45.963475
dt2的数据类型 <class 'datetime.datetime'> dt2表示的日期时间 2008-08-08 20:08:00: 2008: 8: 8: 20: 8: 0
202851日比2028101日早吗? True
nowdt的数据类型: <class 'datetime.datetime'> nowdt表示的数据是什么? 2024-01-16 13:53:45.963475
nowdt_str: <class 'str'> nowdt_str表示的数据是什么? 2024/01/16 13:53:45
str_datetime数据类型 <class 'str'> str_datetime表示的数据: 202888208分
dt3数据类型 <class 'datetime.datetime'> dt3表示的数据: 2028-08-08 20:08:00

timedelta类

from datetime import datetime
from datetime import timedelta

# 创建两个 datetime类型的对象
delta1=datetime(2028,10,1)-datetime(2028,5,1)
print('date1的数据类型:',type(delta1),'delta1所表示的数据',delta1)
print('2028年5月1日之后的153天是:',datetime(2028,5,1)+delta1)

# 通过传入参数的方式创建一个 timedelta对象
td1=timedelta(10)
print('创建一个10天的timedelta对象',td1)
td2=timedelta(10,11)
print('创建一个10天11秒的timedelta对象',td2)
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值