day15 模块

day15 模块

今日内容概要

  1. 自定义模块
  2. time模块
  3. datetime模块
  4. random模块
  5. sys模块
  6. os模块

昨日回顾

  1. 有参装饰器:

    给装饰器额外增加一个参数来控制装饰器的行为:

    def auth(arg):
        def wrapper(func):
            def inner(*args, **kwargs):
                if arg:
                    print(111)
                    ret = func(*args, **kwargs)
                    print(222)
                else:
                    func(*args, **kwargs)
                return ret
            return inner
        return wrapper
    
    @auth(True)
    def index():
        print('is index')
    index()
    
  2. 多个装饰器装饰一个函数:

    def wrapper2(func):
        def inner(*args, **kwargs):
            print(111)
            func(*args, **kwargs)
            print(222)
        return inner
    
    def wrapper1(func):
        def inner(*args, **kwargs):
            print(333)
            func(*args, **kwargs)
            print(444)
        return inner
            
    @wrapper1
    @wrapper2
    def func():
        print('is func')
    func()
    
  3. 递归

    1. 不断调用自己本身
    2. 有明确的结束条件

    递归最大深度:官方宣称1000,实测994

    修改递归最大深度:

    import sys
    sys.setrecuisionlimit(10000)
    

今日内容详细

自定义模块

模块的定义:模块就是一个py文件。

模块主要分为三类:

  1. 内置模块,也称Python标准库,是Python官方已经封装在Python解释器中了,大约有200多个;
  2. 第三方模块,是一些组织或个人写好的py文件,供我们使用;
  3. 自定义模块,也就是我们自己写的py文件。

为什么要学习模块:

  1. 开发效率高
  2. 拿来主义:同内置函数一样,我们只需要把模块拿来用就好,不必深究它的原理
  3. 减少重复代码:分文件管理,有助于修改和维护。

怎么使用模块:

import 导入 将模块中所有内容导入
import lib
lib.a # import使用功能需要.操作

from 模块名 import 功能
from 同一个模块 import a,b,c
from lib import a as aa

导入时发生的事情

  1. 将模块存储到当前名称空间中
  2. 以模块的名字命名,并开辟空间
  3. 通过模块名来使用模块中的功能

同一个模块即便写多次导入, 也只执行一次

导入顺序:
内存 —> 内置 —> sys.path列表

模块的两种用法:

  1. 当做普通模块执行
  2. 被当做脚本执行
if __name__ == "__main__":
    pass

在当前文件中执行__name__获取的值是'__main__'
当前文件被当做模块导入时,__name__获取的是当前文件名

以后要避免(不能这么写)的问题:

  • 循环导入(了解)

import 和 from 的对比:

  • import 全部导入

  • from 指定功能导入

  • import和from都可以支持as

  • from会将之前定义同名的覆盖

  • from 可以一行导入多个功能

  • from lib import * 将lib下所有的功能全部导入

  • import 建议一行导入一个模块

  • 推荐是使用from

模块导入的顺序:

  • 内存,内置,sys.path、
sys.path  # *****
sys.path.append() # 添加一个模块查找路径
__all__=['name','read1'] # 控制form import *

time模块

time模块,也就是时间模块,用来进行一些与时间有关的操作。其使用方法为:

import time
print(time.time())   # 时间戳 浮点数
print(time.sleep(2)) # 秒 进行睡眠

时间分类:

  1. 时间戳 — 用于进行计算
  2. 结构化时间 — 给程序员查看使用(命名元组)
  3. 字符串时间 — 给用户查看的

时间模块的基本方法有:

t = time.time()         # 用于获取当前时间戳
print(time.localtime(t))   # 将时间戳转成结构化时间
t = time.localtime()     # 将时间戳转成结构化时间,不写默认是当前时间戳
print(time.mktime(t))    # 将结构化时间转成时间戳
t = time.localtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",t))  # 将结构化时间转换成字符串时间
str_time = "2019-9-1 12:23:06"
print(time.strptime(str_time,"%Y-%m-%d %H:%M:%S")) # 将字符串时间转换成结构化时间
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))    # 将结构化时间转化为字符串时间
str_time = "2019-9-1 12:23:06"
print(time.mktime(time.strptime(str_time,"%Y-%m-%d %H:%M:%S")))

print(time.localtime()[0])
print(time.localtime().tm_year)
print(time.localtime().tm_yday)

输出的结果为:
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=26, tm_hour=19, tm_min=19, tm_sec=21, tm_wday=3, tm_yday=269, tm_isdst=0)
1569496761.0
2019-09-26 19:19:21
time.struct_time(tm_year=2019, tm_mon=9, tm_mday=1, tm_hour=12, tm_min=23, tm_sec=6, tm_wday=6, tm_yday=244, tm_isdst=-1)
2019-09-26 19:19:21
1567311786.0
2019
2019
269

datetime模块

datetime模块的作用和time模块类似,都是用来进行时间操作的,其基本操作为:

from datetime import datetime
print(datetime.now())   # 获取到当前是时间,对象
print(type(datetime.now()))
print(datetime(2016,11,13,12,13,14)) # 将指定时间转化为datetime对象

import time
print(datetime.fromtimestamp(time.time()))    # 时间戳转换成对象
print(datetime.timestamp(datetime.now()))    # 将对象转换成时间戳


print(datetime.strftime(datetime.now(),"%Y-%m-%d %H:%M:%S"))    # 将对象转换成字符串
print(datetime.strptime("2019/10/14","%Y/%m/%d"))    # 将字符串转换成对象

print(datetime.now() - datetime(9999,11,1,12,13,14))    # 用来计算当前时间相对于指定时间相差多久

from datetime import datetime,timedelta
print(datetime.now())
print(datetime.now() - timedelta(days=400))    # 用来计算400天前时间的datetime对象
print(datetime.now() - timedelta(days=500))

输出的结果为:
2019-09-26 19:32:59.456316
<class 'datetime.datetime'>
2016-11-13 12:13:14
2019-09-26 19:32:59.457314
1569497579.457313
2019-09-26 19:32:59
2019-10-14 00:00:00
-2914671 days, 7:19:45.490226
2019-09-26 19:32:59.490226
2018-08-22 19:32:59.490226
2018-05-14 19:32:59.490226

random模块

random模块,也就是随机数模块,用来生成一定范围内的随机数。随机数模块可以这样使用:

import random
print(random.random())    # 用来生成0~1之间的小数
print(random.randint(1, 5))   # 随机生成1~5之间(包括1和5)的整数
print(random.randrange(0, 10, 2))    # 随机产生range切片范围内的整数,参数的使用方法与range相同

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(random.choice(lst))    # 从可迭代对象中随机选出一个元素
print(random.choices(lst, k=5))    # 从可迭代对象中选择指定个数的元素,可能会重复选取
print(random.sample(lst, k=5))    # 从可迭代对象中选取指定个数的元素,不会重复选取
random.shuffle(lst)    # 将列表顺序打乱
print(lst)

输出的结果为:
0.30540264424342467
2
6
4
[3, 1, 9, 3, 8]
[8, 5, 9, 6, 3]
[3, 5, 1, 8, 4, 6, 9, 7, 2]

os模块

os模块主要用来进行与操作系统进行交互,它的导入方式为:

import os

os模块主要涉及文件操作、文件夹操作、路径操作和其他操作四个方面。

文件操作

通过os模块对文件直接进行的操作:

os.rename('旧名字', '新名字')    # 重命名    非常重要
os.remove('要删除的文件名')    # 删除文件    非常重要
文件夹操作

对文件夹进行操作:

os.makedirs('a/b/c/d/e/f')    # 递归创建文件夹    非常重要
os.removedirs('a/b/c/d/e/f')    # 递归删除文件夹,若文件夹非空,会报错    非常重要
os.mkdir('a')    # 创建文件夹    非常重要
os.rmdir('a')    # 删除文件夹    非常重要
print(os.listdir('.'))    # 查看指定路径下的所有文件    非常重要
路径操作

对路径的操作主要使用os.path下的各种方法:

print(os.getcwd())    # 获取当前工作路径    非常重要
os.chdir('..\day14')    # 改变当前脚本工作目录,相当于终端下的cd
print(os.path.abspath('lib.py'))    # 获取文件的绝对路径
print(os.path.split('C:\Python_26\day14'))    # 对路径进行分割位目录和文件名,返回值为元组
print(os.path.dirname('C:\Python_26\day14'))    # 获取父级目录    非常重要
print(os.path.basename('C:\Python_26\day14'))    # 返回path最后的文件名

# is系列
print(os.path.exists('C:\Python_26\day14'))    # 判断路径是否存在
print(os.path.isabs('day07'))    # 判断是否是绝对路径,如果是则返回True
print(os.path.isfile('C:\Python_26\day15\lib.py'))    # 判断是否是一个存在的文件,如果是则返回True    非常重要
print(os.path.isdir('C:\Python_26\day15')    # 判断是否是一个存在的目录,如果是则返回True    非常重要
print(os.path.join("C:\\User",'Python_26',"day15","lib.py"))    # 将多个路径组合后返回    非常重要
print(os.path.getsize('C:\Python_26\day15\lib.py'))    # 获取文件大小
其他操作

os方法的其他操作:

print(os.open('dir').read())    # 给终端发送指令
print(os.environ)    # 获取环境变量
总结

os模块功能很多很杂,不可能全都记住,但是下面的这些功能我们日后会经常用到,一定要尽量学会使用:

os.getcwd()
os.mkdir()
os.rmdir()
os.makedirs()
os.removedirs()
os.rename()
os.remove()
os.path.abspath()
os.path.dirname()
os.path.basename()
os.path.join()
os.path.isfile()
os.path.isdir()
os.path.getsize()

sys模块

sys模块用来和Python解释器进行交互,我们只需要记住sys.path功能即可:

import sys
print(sys.path)

除此之外,sys模块还有几个有意思的功能可以稍作了解:

import sys
if sys.platform == 'win32':    # sys.platform方法用来查看操作系统平台
    print('Windows')
elif sys.platform == 'darwin':
    print('Mac')
    
lst = sys.argv    # 在终端中模拟input输入,避免input函数阻塞
print(lst[-1])

print(sys.version)    # 用来查看Python的版本
sys.exit(1)    # 修改Python结束后的报告代码

print(sys.modules)   # 获取所有的模块

sys.setrecuisionlimit()    # 设置递归深度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值