10月8日学习总结

本文详细介绍了Python中的装饰器及其语法,包括如何给函数添加功能,以及装饰器在函数执行时间统计、函数开头打印start、改变函数返回值等方面的应用。此外,还阐述了模块导入的原理和不同方式,以及导入模块时`__name__=='__main__'`的作用。同时,讲解了数学和时间模块的常用函数,如math模块的数学运算和random模块的随机数生成。最后,探讨了时间模块中获取和处理时间的方法。
摘要由CSDN通过智能技术生成

10月8日学习总结

一、装饰器

1.作用

装饰器的作用:给已经写好的函数新增功能

2.给函数新增功能

1.方案一:接修改原函数,把新增功能添加进去

存在的问题:如果多个函数都需要新增相同的功能,相同功能的代码需要写多遍

2.方案二:实参高阶函数

3.方案三:使用装饰器

二、装饰器语法

1.固定结构

装饰器=实参高阶函数+返回值高阶函数+糖语法
# 1.固定结构
'''
def 装饰器名称(旧函数):
    def 新函数(*args,**kwargs):
        result=旧函数(*args,**kwargs)
        实现新增的功能
        return result
    return 新函数
'''
def add_logo(fn):
    def new_fn():
        fn()
        print('千锋教育!')
    return new_fn

@add_logo
def func():
    print('hello world!')
 
func()
# hello world!
# 千锋教育!
# 练习1:写一个统计函数执行时间的装饰器
import time
def total_time(fn):
    def new_fn(*args,**kwargs):
        start=time.time()
        result=fn(*args,**kwargs)
        end=time.time()
        print(f'执行时间{end-start}s')
        return result
    return new_fn

@total_time
def func5(x):
    return x*10
print(func5(10))

# 练习2:写一个装饰器在原函数的开头打印 start
def start(fn):
    def new_fn(*args,**kwargs):
        print('start')
        result=fn(*args,*kwargs)
        return result
    return new_fn

@start
def func1(x):
    return x * 10

print(func1(5))

# 练习3:将返回值是数字的函数的返回值变成原来的10000倍
def blow_up(fn):
    def new_fn(*args,**kwargs):
        result=fn(*args,**kwargs)
        if type(result) in (int,float):
            return result*10000
        return result
    return new_fn

@blow_up
def func1(x):
    return x * 10
print(func1(5))

三、模块的导入

1.模块

1.一个py文件就是一个模块

2.可以在一个模块中使用另一个模块的内容,前提:

(1)被另外一个模块使用的模块的名字必须符合变量名的要求

(2)被使用之前需要导入

2.导入模块

1) import 模块名   -   直接导入指定模块,导入后能通过"模块名."的方式使用模块中所有的全局变量
2) from 模块名 import 变量名1,变量名2,变量名3,...   -   通过模块导入指定变量,导入后直接使用指定的变量
3) from 模块名 import *    -   通过模块导入模块中所有全局变量,导入后直接使用变量
4) 重命名
import 模块名 as 新模块名  -   使用模块的时候用新模块名来使用
from 模块名 import 变量名1,变量名2,变量名3......
方式一:
import test

print(test.a)
print(test.x)
print(test.func1())

import random
random.randint(10,20)

方式二:
from test import a,x,func1
print(a)
print(x)
print(func1())

方式三:
from test import *
print(a)
print(x)
print(func1())

方式四:
import test as ts
import numpy as np
import pandas as pd

test='i love you'
print(test,ts.a)

from test import x as t_x,a
x='小明'
print(x,t_x)
print(a)

四、导入模块的原理

1.原理

1.当代码执行到导入模块的时候,系统会自动进入该模块将模块中所有代码都执行

2.if语句

1.这个if语句的特点:在if语句中的代码当前模块被别的模块导入的时候不会执行;如果直接运行当前模块又会执行

if __name__ == '__main__':
    pass

五、包的导入

1.导入包中的模块

1) import 包名    -   要修改__init__.py文件才有意义
2) import 包名.模块名
3) from 包名 import模块名1,模块2,...
4) from 包名.模块名 import 变量1,变量2,...
# ========导入方式1===========
# import fileManager

# ======导入方式2========
# a.不重命名
# import fileManager.csvFile
# print(fileManager.csvFile.aa)
# fileManager.csvFile.read_file()

# b.重命名
# import fileManager.csvFile as csvFile
# print(csvFile.aa)
# csvFile.read_file()

# =========导入方式3=======
# from fileManager import csvFile,jsonFile
# print(csvFile.aa)
# jsonFile.write_dict()

# =======导入方式4=========
# from fileManager.jsonFile import write_dict
# write_dict()

2.导入包的原理

导入包中的模块的内容的时候,系统会先执行__init__.py文件中的内容,再执行模块中的内容


# 功能一
import file_manager

file_manager.csvFile.read_file()
file_manager.textFile.del_file()

# 功能二
from file_manager import write_dict
write_dict()


import file_manager
file_manager.write_dict()
file_manager.open_file()

from file_manager import open_file

open_file()

六、数学模块

1.match和cmatch

math :普通数字相关的数学函数

cmath:复数相关的数据函数

普通数字:100、-23.8、0.23

复数(complex):a+bj (a-实部,b-虚部,j是虚数单位;j**2 == -1)

import math, cmath

x = 10 + 2j
y = 20 + 1j   # 1必须写
z = 20 - 3j
print(type(x))

print(x + z)   # 30 - 1j
print(x * z)   # 206+10j


# ceil(浮点数) - 将浮点数转换成整数(向大取整)
print(math.ceil(1.9))   # 2
print(math.ceil(1.1))   # 2

# floor(浮点数) - 将浮点数转换成整数(向小取整)
print(math.floor(1.9))  # 1
print(math.floor(1.1))  # 1

# round() - 将浮点数转换成整数(四舍五入)
print(round(1.9))   # 2
print(round(1.1))   # 1

2.random

1.randrange(M, N, step) - 随机整数

import random

print(random.randrange(10, 20, 2))

2.randint(M, N) - 随机整数

import random

print(random.randint(10, 20))

3.random() - 产生0~1的随机小数

import random

print(random.random())      # 0 ~ 1
print(random.random() * 10)     # 0 ~ 10
print(random.random() * 9 + 1)  # 1 ~ 10

4.choice(序列) - 从序列中随机获取一个元素

5.choices(序列, k=数量) - 从序列中随机获取指定数量的元素(有放回抽取)

nums = [1, 2, 3, 4, 5]
print(random.choices(nums, k=3))

6.sample(序列, k=数量) - 从序列中随机获取指定数量的元素(无放回抽取)

import random

print(random.sample(nums, k=3))

7.shuffle(列表) - 将序列中的元素的顺序随机打乱

import random

random.shuffle(nums)
print(nums)

七、时间模块

import time
import datetime
# 1.获取当前时间
# 时间戳:以当前时间到1970年1月1日0时0分0秒(格林威治时间)的时间差来记录一个时间(时间差的单位是秒)
t1=time.time()
print(t1)

# 2.获取本地时间
# localtime()   -   获取当前的本地时间(返回值是结构体时间)
t2=time.localtime()
print(t2)

# localtime(时间戳)    -   获取指定时间戳对应的本地时间
t3=time.localtime(1633684406.1188622)
print(t3)

# 3.睡眠  -   让程序停止运行
# sleep(时间) -   时间单位:秒
time.sleep(2)
print('=========')

# 4.将结构体时间转换成时间戳
# mktime(结构体时间)
t5=time.mktime(t2)
print(t5)
import time
from datetime import datetime,time,date,timedelta

# 1.datetime
# 1) 获取当前时间
t1=datetime.now()
print(t1,type(t1))  # 2021-10-09 09:43:53.315789 <class 'datetime.datetime'>

# 2) 创建datetime对象(时间对象)
t2=datetime(2002,10,1)
print(t2)   # 2002-10-01 00:00:00

t3=datetime(2012,9,3,minute=30)
print(t3)   # 2012-09-03 00:30:00

# 3) 单独获取时间数据
print(t3.year)
print(t3.month)
print(t3.day)
print(t3.hour)
print(t3.minute)
print(t3.second)
print(t3.weekday())

# 4) 时间对象和字符串时间的转换
# 将字符串时间转换成时间对象:datetime.strptime(字符串时间,时间格式)
t4_str='2001-8-3 11:32:40'
t4=datetime.strptime(t4_str,'%Y-%m-%d %H:%M:%S')
print(t4.weekday())

# 5) 将时间对象转换成字符串
t7=datetime(2020,1,5,23,50,34)
print(t7)   # 2020-01-05 23:50:34

# xxxx年xx月xx日 xx时xx分xx秒
t7_str=t7.strftime('%Y年%m月%d日 %H时%M分%S秒')
print(t7_str)   # 2020年01月05日 23时50分34秒

# xx月xx日 星期
t7_str1=t7.strftime('%m月%d日 %a')
print(t7_str1)

# 2.timedelta   -   对时间进行加减操作的
t8=datetime(2020,12,31,23,59,10)
print(t8)    # 2020-12-31 23:59:10

# 加1天
result = t8+timedelta(days=1)
print(result)  # 2021-01-01 23:59:10

# 加1天零5个小时
result = t8+timedelta(days=1,hours=5)
print(result)  # 2021-01-02 04:59:10

# 25小时之前
result = t8 - timedelta(hours=25)
print(result) # 2020-12-30 22:59:10

result = t8-timedelta(weeks=7)
print(result) # 2020-11-12 23:59:10

# 练习:封装一个函数可以将指定的字符串时间转换成时间戳
# xxxx-xx-xx xx:xx:xx
t4_str='2001-8-3 11:32:40'
def t(str1:str):
    import time
    struct_t=time.strptime(str1,'%Y-%m-%d %H:%M:%S')
    return time.mktime(struct_t)

print(t('2001-8-3 11:32:40'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值