Day21 模块与包

程序解耦,把函数中具有相同功能的部分抽离出来作为新的函数,提高可读性和代码可维护性

一个python文件有两种使用方法

1.直接作为脚本执行 python xx.py

2.在其他Python脚本中导入作为模块调用执行 import xx

文件中最好只写功能,可执行部分都放到 if __name__ == '__main__'中

当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行

Python属于脚本语言,不同于C\C++等编译型语言需要将程序编译成二进制再运行,而是动态的逐行解释运行,也就是从第一行开始运行,没有如main函数一样的统一程序入口

1. __name__是系统内置变量,用于表示当前模块的名字,即所在文件名,当Python模块直接运行时,__name__的值为‘__main__’

2. 在其他Python脚本中导入作为模块调用执行时,该模块的__name__为模块本身的名字

一. 模块与包

一个.py文件就称之为一个模块,模块可以分为三类

  • python标准库
  • 第三方模块
  • 应用程序自定义模块

【注!避免函数名和变量名冲突】

模块导入语法

[from模块名] import [模块|类│变量│函数│*] [as别名]

常用组合如:

  • import模块名
  • from模块名 import 类、变量、方法等
  • from模块名 import *
  • import模块名 as 别名
  • from模块名 import 功能名 as 别名

import 会把模块文件都执行一遍,然后再引入变量名

【注!from module import * 不推荐,因为引入其他来源的命名可能会覆盖已有的定义】

import并非会从同级目录中寻找文件,而是根据执行文件目录路径寻找,sys.path

为了避免模块名冲突,引入按目录来组织模块的方法,称为

只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。

【注!每一个包目录下都必须要有一个__init__.py文件,否则Python会把这个目录当作普通目录。__init__.py可以是空文件,也可以有代码,因为其本身就是一个模块,模块名对应包的名字,例如在templates包中创建__init__.py文件,对应的模块名就是templates】

使用包

  • import 完整包名.模块名
  • from 包名 import 模块

【如果from 顶级包名 import 次级包名,则会执行次级包名的__init__.py文件】

常用模块:time、random、os、sys、json(⭐⭐⭐) & pickle、logger2、re

调用包的流程

①当导入的XX包在另一个项目文件中,在自己写的程序中需要用到XX包。

②所以我们在运行自己写的程序时,首先加载导入的XX包,加载的时候python解释器会去sys.path默认搜索路径去搜索。

③如果通过sys.path中的路径可以搜索到XX包,然后加载。

④如果无法通过sys.path中的路径搜索到XX包,即说明自己的程序中引用的XX包,与自己程序脚本所在目录不在同一个路径。(无法在自己的程序脚本中根据默认搜索路径查找到XX包)

⑤然后我们就需要将XX包的搜索路径添加到自己程序脚本的默认搜索路径中,重新运行自己的程序脚本,先搜索XX包在家载XX包。

sys.path.append(‘需要引入模块的地址’):临时修改,脚本运行后就会失效,要永久修改只能通过系统变量中添加

二. time模块

time.time():时间戳,用于计算

time.locaoltime():结构化时间

>>> time.localtime()
time.struct_time(tm_year=2023, tm_mon=6, tm_mday=13, tm_hour=14, tm_min=10, tm_sec=16, tm_wday=1, tm_yday=164, tm_isdst=0)
>>> time.mktime(time.localtime())
1686636625.0

 互为逆操作

>>> time.strftime("%Y-%m-%d %X", time.localtime()) # 代表时间的元组或者struct_time,注意不能越界
'2023-06-13 14:11:41'
>>> time.strptime('2023-06-13 14:11:41', '%Y-%m-%d %X')
time.struct_time(tm_year=2023, tm_mon=6, tm_mday=13, tm_hour=14, tm_min=11, tm_sec=41, tm_wday=1, tm_yday=164, tm_isdst=-1)

 

 

 转换为固定的表达形式

>>> time.asctime(time.localtime())
'Tue Jun 13 14:16:06 2023'
>>> time.ctime(1686636625.0)
'Tue Jun 13 14:10:25 2023'

time.sleep():休眠

time.clock():不常用

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2023, 6, 13, 14, 14, 17, 316075)

【注!不要和常用模块重名】

三. random模块

random.random():随机生成0-1范围的浮点数,开区间

random.randint(a, b):生成[a, b]范围的整数

random.randrange(a, b):生成[a, b)的整数

random.choice([a, b, c, d]):可迭代对象中随机选取一个元素

random.sample([a, b, c, d], num):可迭代对象中随机选取num个元素

random.uniform(a, b):生成一个[a,b]之间的随机小数

random.shuffle(list):打乱可迭代对象(没有返回值)

>>> import random
>>> random.random()
0.31312642016093895

>>> random.randint(1,5)
4
>>> random.randint(1,5)
1
>>> random.randint(1,5)
3
>>> random.randint(1,5)
3
>>> random.randint(1,5)
4
>>> random.randint(1,5)
4
>>> random.randint(1,5)
3

>>> random.randrange(1,5)
2

>>> random.choice([1,34,53,623,'asf'])
34
>>> random.choice([1,34,53,623,'asf'])
34
>>> random.choice([1,34,53,623,'asf'])
1
>>> random.choice([1,34,53,623,'asf'])
53

>>> random.sample(['asdjd',123,5135,'dsf',543,'ds'], 3)
['ds', 5135, 543]
>>> random.uniform(1,5)
1.489437660847151

>>> a = ['asdjd',123,5135,'dsf',543,'ds']
>>> random.shuffle(a)
>>> a
[5135, 'dsf', 123, 'asdjd', 543, 'ds']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值