IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> day-14 装饰器和模块 -> 正文阅读

[Python知识库]day-14 装饰器和模块

day-14 装饰器和模块

1.装饰器(给函数添加功能)

1.装饰器的作用:给已经定义好的函数添加新功能的

2.装饰器语法:

? 装饰器 = 实参高阶函数 + 返回值高阶函数 + 糖语法(@需要添加功能的函数)

# 固定结构
"""
def 装饰器名称(旧函数):
	def 新函数(*args, **kwargs):
		result = 旧函数(*args, **kwargs)
		实现新增的功能
		return result
	return 新函数
"""
# 练习1:写一个统计函数执行时间的装饰器
import time
# 定义装饰器
def total_time(old_fn):
    def new_fn(*args, **kwargs):
        start = time.time()
        result = old_fn(*args, **kwargs)
        end = time.time()
        print(f'{start - end}s')
        return result
    return new_fn
# 使用装饰器
@total_time
# 定义原函数(也就是旧函数)
def download(name):
    print(f'{name}开始下载')
    print('电影下载中')
    print(f'{name}结束下载')

# 调用函数
download('当幸福来敲门')
# 练习2:写一个装饰器在原函数的开头打印 start
def add_print(old_fn):
    def new_fn(*args, **kwargs):
        print('start')
        result = old_fn(*args, **kwargs)
        return result
    return new_fn
@add_print
def old_print():
    print('----')
 
old_print()
# 练习3:将返回值是数字的函数的返回值变成原来的一万倍
def add_num(old_fn):
    def new_fn(*args, **kwargs):
        result = old_fn(*args, **kwargs)
        if type(result) in (int, float):
            return 10000 * result
        return result
    return new_fn
@add_num
def func(x):
    return x

result_num = func(98)
print(result_num)  # 980000
result_num1 = func('98')
print(result_num1)  # 98
2.模块的导入

1.模块

python中一个py文件就是一个模块;可以在一个模块中使用另外一个模块中的内容,前提:1)被另外一个模块使用的模块的名字必须符合变量名的要求;2)被使用之前需要导入

2.导入模块

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

3.导入模块的原理

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

3.包的导入

1.怎么导入包中的模块

"""
1)import 包名  - 要修改__init__.py文件才有意义,否则无用
2)import 包名.模块名
3)from 包名 import 模块名
4)from 包名.模块名 import 变量名1,变量名2,...
"""

2.导入包的原理

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

4.数学模块

? math - 普通数字相关的数字函数

? cmath - 复数相关的数据函数

? 普通数字(int, float)

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

x =10 + 2j
y = 20 - 3j
print(type(x))   # <class 'complex'>
print(x + y)   # 30 -1j
print(x * y)   # (206 + 10j)
# math
# ceil(浮点数) - 将浮点数转换成整数(向大取整)
print(math.ceil(1.9))   # 2
print(math.ceil(1.1))  # 2
# floor(浮点数) - 将浮点数转换成整数(向小取整)
print(math.floor(1.9))  # 1
print(math.floor(2.4))   # 2
# sqrt(数据) - 开方
print(math.sqrt(16))   # 4.0

# round(浮点数) - 将浮点数转换成整数(四舍五入)(系统自带的)
print(round(1.9))  # 2
print(round(1.3))   # 1
5.时间模块

1.获取当前时间

2.时间戳:以当前时间到1970年1月1日0时0分0秒(格林威治时间)的时间差来记录一个时间(时间差的单位是秒)

t1 = time.time()
print(t1)

3.获取本地时间

# localtime() - 获取当前的本地时间(返回值是结构体时间)
t2 = time.localtime()
print(t2)
# localtime(时间戳)  - 获取指定时间戳对应的指定时间
t3 = time.localtime(0)
print(t3)

4.睡眠 - 让程序暂停运行

# sleep(时间)  - 时间单位:秒
time.sleep(2)  # 让程序暂停2秒再执行下面的代码
print('======')

5.将结构体时间转换成时间戳

# mktime(结构体时间)
t2 = time.localtime()
t5 = time.mktime(t2)
print(t5)
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:14:15  更:2021-10-09 16:16:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:21:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码