【Python】高级进阶(专版提升3)
Python
- 1 程序结构
- 1.1 模块 Module
- 1.1.1 定义
- 1.1.2 作用
- 1.1.3 导入
- 1.1.3.1 import
- 1.1.3.2 from import
- 1.1.4 模块变量
- 1.1.5 加载过程
- 1.1.6 分类
- 1.2 包package
- 1.2.1 定义
- 1.2.2 作用
- 1.2.3 导入
- 1.1.3.1 import
- 1.1.3.2 from import
- 2 异常处理Error
- 2.1 异常
- 2.2 处理
- 3 迭代
- 3.1 可迭代对象iterable
- 4 生成器generator
- 4.1 生成器函数
- 4.2 内置生成器
- 4.2.1 枚举函数enumerate
- 4.2.2 zip
- 4.3 生成器表达式
- 5 函数式编程
- 5.1 函数作为参数
- 5.1.1 lambda 表达式
- 5.1.2 内置高阶函数
- 5.2 函数作为返回值
- 5.2.1 闭包
- 5.2.2 函数装饰器decorator
- 6. 文件操作
- 6.1 文件管理
- 6.1.1基础概念
- 6.1.2 pathlib模块
- 6.1.2.1创建路径
- 6.1.2.2路径信息
- 6.1.2.3搜索目录
- 6.1.2.4新建路径
- 6.1.2.5重命名
- 6.1.2.6删除路径
- 6.2 文件读写
- 6.2.1文本文件
- 6.2.1.1打开文件
- 6.2.1.2读写文件
- 6.2.1.3关闭文件
- 6.2.2二进制文件
- 6.2.2.1打开文件
- 6.2.2.2读写文件
- 6.2.1.3关闭文件
1 程序结构
1.1 模块 Module
1.1.1 定义
包含一系列数据、函数、类的文件,通常以.py结尾。
1.1.2 作用
让一些相关的数据,函数,类有逻辑的组织在一起,使逻辑结构更加清晰。
有利于多人合作开发。
1.1.3 导入
1.1.3.1 import
(1) 语法:
import 模块名
import 模块名 as 别名
(2) 作用:将模块整体导入到当前模块中
(3) 使用:模块名.成员
1.1.3.2 from import
(1) 语法:
from 模块名 import 成员名
from 模块名 import 成员名 as 别名
from 模块名 import *
(2) 作用:将模块内的成员导入到当前模块作用域中
(3) 使用:直接使用成员名
"""module01.py
"""
def func01():print("module01 - func01执行喽")def func02():print("module01 - func02执行喽")# 导入方式1:import 模块名
# 使用:模块名.成员
# 原理:创建变量名记录文件地址,使用时通过变量名访问文件中成员
# 备注:"我过去"
# 适用性:适合面向过程(全局变量、函数)
import module01module01.func01()
# 导入方式2.1:from 文件名 import 成员
# 使用:直接使用成员
# 原理:将模块的成员加入到当前模块作用域中
# 备注:"你过来"
# 注意:命名冲突
# 适用性:适合面向对象(类)
from module01 import func01
def func01():print("demo01 - func01")func01() # 调用的是自己的func01# 导入方式2.2:from 文件名 import *
from module01 import *
func01()
func02()
1.1.4 模块变量
__name__变量:模块自身名字,可以判断是否为主模块。
当此模块作为主模块(第一个运行的模块)运行时,name绑定’main’,不是主模块,而是被其它模块
导入时,存储模块名。
1.1.5 加载过程
在模块导入时,模块的所有语句会执行。
如果一个模块已经导入,则再次导入时不会重新执行模块内的语句。
1.1.6 分类
(1) 内置模块(builtins),在解析器的内部可以直接使用。
(2) 标准库模块,安装Python时已安装且可直接使用。
(3) 第三方模块(通常为开源),需要自己安装。
(4) 用户自己编写的模块(可以作为其他人的第三方模块)
1.2 包package
1.2.1 定义
将模块以文件夹的形式进行分组管理。
1.2.2 作用
让一些相关的模块组织在一起,使逻辑结构更加清晰。
1.2.3 导入
1.1.3.1 import
(1) 语法:
import 路径.模块名
import 路径.模块名 as 别名
(2) 作用:将模块整体导入到当前模块中
(3) 使用:模块名.成员
1.1.3.2 from import
(1) 语法:
from 路径.模块名 import 成员名
from 路径.模块名 import 成员名 as 别名
from 路径.模块名 import *
(2) 作用:将模块内的成员导入到当前模块作用域中
(3) 使用:直接使用成员名
注意:路径从项目根目录开始计算
2 异常处理Error
2.1 异常
(1) 定义:运行时检测到的错误。
(2) 现象:当异常发生时,程序不会再向下执行,而转到函数的调用语句。
(3) 常见异常类型:
– 名称异常(NameError):变量未定义。
– 类型异常(TypeError):不同类型数据进行运算。
– 索引异常(IndexError):超出索引范围。
– 属性异常(AttributeError):对象没有对应名称的属性。
– 键异常(KeyError):没有对应名称的键。
– 异常基类Exception。
2.2 处理
(1) 语法:
try:可能触发异常的语句
except 错误类型1 [as 变量1]:处理语句1
except 错误类型2 [as 变量2]:处理语句2
except Exception [as 变量3]:不是以上错误类型的处理语句
finally:无论是否发生异常的语句
(2) 作用:将程序由异常状态转为正常流程。
(3) 说明:
as 子句是用于绑定错误对象的变量,可以省略
except子句可以有一个或多个,用来捕获某种类型的错误。
finally子句最多只能有一个,如果没有except子句,必须存在。
如果异常没有被捕获到,会向上层(调用处)继续传递,直到程序终止运行。
3 迭代
每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。例如:
循环获取容器中的元素。
3.1 可迭代对象iterable
(1) 定义:具有__iter__函数的对象,可以返回迭代器对象。
(2) 语法
# 创建:
class 可迭代对象名称:def __iter__(self):return 迭代器
# 使用:for 变量名 in 可迭代对象:语句
(3) 原理:
迭代器 = 可迭代对象.__iter__()
while True:try:print(迭代器.__next__())except StopIteration:break
(4) 演示:
message = "我是花果山水帘洞孙悟空"
# for item in message:
# print(item)
# 1. 获取迭代器对象
iterator = message.__iter__()
# 2. 获取下一个元素
while True:try:item = iterator.__next__()print(item)# 3. 如果停止迭代则跳出循环except StopIteration:break
3.2 迭代器对象iterator
(1) 定义:可以被next()函数调用并返回下一个值的对象。
(2) 语法
class 迭代器类名:def __init__(self, 聚合对象):self.聚合对象= 聚合对象def __next__(self):if 没有元素:raise StopIteration()return 聚合对象元素
(3) 说明:聚合对象通常是容器对象。
(4) 作用:使用者只需通过一种方式,便可简洁明了的获取聚合对象中各个元素,而又无需了解其内部
结构。
(5) 演示:
class StudentIterator:def __init__(self, data):self.__data = dataself.__index = -1def __next__(self):if self.__index == len(self.__data) - 1:raise StopIteration()self.__index += 1return self.__data[self.__index]class StudentController:def __init__(self):self.__students = []def add_student(self, stu):self.__students.append(stu)def __iter__(self):return StudentIterator(self.__students)controller = StudentController()
controller.add_student("悟空")
controller.add_student("八戒")
controller.add_student("唐僧")
# for item in controller:
# print(item) #
iterator = controller.__iter__()
while True:try:item = iterator.__next__()print(item) #except StopIteration:break
4 生成器generator
(1) 定义:能够动态(循环一次计算一次返回一次)提供数据的可迭代对象。
(2) 作用:在循环过程中,按照某种算法推算数据,不必创建容器存储完整的结果,从而节省内存空
间。数据量越大,优势越明显。以上作用也称之为延迟操作或惰性操作,通俗的讲就是在需要的时候才
计算结果,而不是一次构建出所有结果。
4.1 生成器函数
(1) 定义:含有yield语句的函数,返回值为生成器对象。
(2) 语法
# 创建:
def 函数名():…yield 数据…# 调用:
for 变量名 in 函数名():语句
(3) 说明:
– 调用生成器函数将返回一个生成器对象,不执行函数体。
– yield翻译为”产生”或”生成”
(4) 执行过程:
a. 调用生成器函数会自动创建迭代器对象。
b. 调用迭代器对象的next()方法时才执行生成器函数。
c. 每次执行到yield语句时返回数据,暂时离开。
d. 待下次调用next()方法时继续从离开处继续执行。
(5) 原理:生成迭代器对象的大致规则如下
a. 将yield关键字以前的代码放在next方法中。
b. 将yield关键字后面的数据作为next方法的返回值。
(6) 演示:
def my_range(stop):number = 0while number < stop:yield numbernumber += 1for number in my_range(5):print(number) # 0 1 2 3 4
4.2 内置生成器
4.2.1 枚举函数enumerate
(1) 语法:
for 变量 in enumerate(可迭代对象):语句
for 索引, 元素in enumerate(可迭代对象):语句
(2) 作用:遍历可迭代对象时,可以将索引与元素组合为一个元组。
(3) 演示:
list01 = [43, 43, 54, 56, 76]
# 从头到尾读 -- 读取数据
for item in list01:print(item)
# 非从头到尾读 -- 修改数据
for i in range(len(list01)):if list01[i] % 2 == 0:list01[i] += 1
for i, item in enumerate(list01): # -- 读写数据if item % 2 == 0:list01[i] += 1
4.2.2 zip
(1) 语法:
for item in zip(可迭代对象1, 可迭代对象2):语句
(2) 作用:将多个可迭代对象中对应的元素组合成一个个元组,生成的元组个数由最小的可迭代对象决
定。
(3) 演示:
list_name = ["悟空", "八戒", "沙僧"]
list_age = [22, 26, 25]
# for 变量 in zip(可迭代对象1,可迭代对象2)
for item in zip(list_name, list_age):
print(item)
# ('悟空', 22)
# ('八戒', 26)
# ('沙僧', 25)
# 应用:矩阵转置
map = [
[2, 0, 0, 2],
[4, 2, 0, 2],
[2, 4, 2, 4],
[0, 4, 0, 4]
]
# new_map = []
# for item in zip(map[0],map[1],map[2],map[3]):
# new_map.append(list(item))
# print(new_map)
# new_map = []
# for item in zip(*map):
# new_map.append(list(item))
new_map = [list(item) for item in zip(*map)]
print(new_map)
# [[2, 4, 2, 0], [0, 2, 4, 4], [0, 0, 2, 0], [2, 2, 4, 4]]
4.3 生成器表达式
(1) 定义:用推导式形式创建生成器对象。
(2) 语法:
变量 = (表达式 for 变量 in 可迭代对象 if 条件)
5 函数式编程
(1) 定义:用一系列函数解决问题。
– 函数可以赋值给变量,赋值后变量绑定函数。
– 允许将函数作为参数传入另一个函数。
– 允许函数返回一个函数。
(2) 高阶函数:将函数作为参数或返回值的函数。
5.1 函数作为参数
将核心逻辑传入方法体,使该方法的适用性更广,体现了面向对象的开闭原则。
list01 = [342, 4, 54, 56, 6776]
# 定义函数,在列表中查找第一个大于100的数
def get_number_gt_100():for number in list01:if number > 100:return number# 定义函数,在列表中查找第一个偶数
def get_number_by_even():for number in list01:if number % 2 == 0:return number# 参数:得到的是列表中的元素
# 返回值:对列表元素判断后的结果(True False)
def condition01(number):return number > 100def condition02(number):return number % 2 == 0# 通用函数
def find_single(condition): # 抽象for item in list01:# if number > 100:# if condition01(item):# if condition02(item):if condition(item):# 统一return item# 变化点函数:查找小于10的数据
def condition03(number):return number < 10print(find_single(condition03))
5.1.1 lambda 表达式
(1) 定义:是一种匿名方法
(2) 作用:
– 作为参数传递时语法简洁,优雅,代码可读性强。
– 随时创建和销毁,减少程序耦合度。
(3) 语法
# 定义:
变量 = lambda 形参: 方法体# 调用:
变量(实参)
(4) 说明:
– 形参没有可以不填
– 方法体只能有一条语句,且不支持赋值语句。
(5) 演示:
from common.iterable_tools import IterableHelper
# 定义函数,在列表中查找所有大于100的数
# def condition01(number):
# return number > 100# 定义函数,在列表中查找所有偶数
# def condition02(number):
# return number % 2 == 0list01 = [342, 4, 54, 56, 6776]
for item in IterableHelper.find_all(list01,lambda number: number > 100):print(item)
for item in IterableHelper.find_all(list01,lambda number: number % 2 == 0):print(item)
5.1.2 内置高阶函数
(1) map(函数,可迭代对象):使用可迭代对象中的每个元素调用函数,将返回值作为新可迭代对象
元素;返回值为新可迭代对象。
(2) filter(函数,可迭代对象):根据条件筛选可迭代对象中的元素,返回值为新可迭代对象。
(3) sorted(可迭代对象,key = 函数,reverse = bool值):排序,返回值为排序结果。
(4) max(可迭代对象,key = 函数):根据函数获取可迭代对象的最大值。
(5) min(可迭代对象,key = 函数):根据函数获取可迭代对象的最小值。
(6) 演示:
class Employee:def __init__(self, eid, did, name, money):self.eid = eid # 员工编号self.did = did # 部门编号self.name = nameself.money = money# 员工列表
list_employees = [Employee(1001, 9002, "师父", 60000),Employee(1002, 9001, "孙悟空", 50000),Employee(1003, 9002, "猪八戒", 20000),Employee(1004, 9001, "沙僧", 30000),Employee(1005, 9001, "小白龙", 15000),
]# 1. map 映射
# 需求:获取所有员工姓名
for item in map(lambda item: item.name, list_employees):print(item)# 2. filter 过滤器
# 需求:查找所有部门是9002的员工
for item in filter(lambda item: item.did == 9002, list_employees):print(item.__dict__)# 3. max min 最值
emp = max(list_employees, key=lambda emp: emp.money)
print(emp.__dict__)# 4. sorted
# 升序排列
new_list = sorted(list_employees, key=lambda emp: emp.money)
print(new_list)# 降序排列
new_list = sorted(list_employees, key=lambda emp: emp.money, reverse=True)
print(new_list)
5.2 函数作为返回值
逻辑连续,当内部函数被调用时,不脱离当前的逻辑。
5.2.1 闭包
(1) 三要素:
– 必须有一个内嵌函数。
– 内嵌函数必须引用外部函数中变量。
– 外部函数返回值必须是内嵌函数。
(2) 语法
# 定义:
def 外部函数名(参数):外部变量def 内部函数名(参数):使用外部变量return 内部函数名# 调用:
变量 = 外部函数名(参数)
变量(参数)
(3) 定义:是由函数及其相关的引用环境组合而成的实体。
(4) 优点:内部函数可以使用外部变量。
(5) 缺点:外部变量一直存在于内存中,不会在调用结束后释放,占用内存。
(6) 作用:实现python装饰器。
(7) 演示:
def give_gife_money(money):print("获得", money, "元压岁钱")def child_buy(commodity, price):nonlocal moneymoney -= priceprint("购买了", commodity, "花了", price, "元,还剩下", money)return child_buyaction = give_gife_money(500)
action("变形金刚", 200)
action("芭比娃娃", 300)
5.2.2 函数装饰器decorator
(1) 定义:在不改变原函数的调用以及内部代码情况下,为其添加新功能的函数。
(2) 语法
def 函数装饰器名称(func):def wrapper(*args, **kwargs):需要添加的新功能res = func(*args, **kwargs)return resreturn wrapper@ 函数装饰器名称
def 原函数名称(参数):
函数体原函数(参数)
(3) 本质:使用“@函数装饰器名称”修饰原函数,等同于创建与原函数名称相同的变量,关联内嵌函数;
故调用原函数时执行内嵌函数。
原函数名称 = 函数装饰器名称(原函数名称)
def func01():print("旧功能")def new_func(func):def wrapper():print("新功能")func() # 执行旧功能return wrapper# 新功能覆盖了旧功能
# func01 = new_func# 调用一次外部函数(装饰器本质)
func01 = new_func(func01)
# 调用多次内部函数
func01()
func01()
(3) 装饰器链:
一个函数可以被多个装饰器修饰,执行顺序为从近到远。
练习1:不改变插入函数与删除函数代码,为其增加验证权限的功能
def verify_permissions():print("验证权限")def insert():print("插入")def delete():print("删除")insert()
delete()
6. 文件操作
6.1 文件管理
6.1.1基础概念
(1)文件
定义:保存在持久化存储设备(硬盘、U盘、光盘…)上的一段数据。
例如:文本,图片,视频,音频等。
(2)路径
– 定义:对文件存储在计算机中位置的标识,除Window使用反斜杠"“以外,其他操作系统使用斜
杠”/“分隔。
– 当前路径:正在执行的Python文件所在目录。
– 绝对路径:从操作系统根目录开始,Window以盘符"C:”、“D:”,OS X或Linux以斜杠"/"开始。
– 相对路径:从当前目录开始。
6.1.2 pathlib模块
对os模块中与文件操作相关的封装,是基于面向对象的跨平台路径操作模块。
官方文档:https://docs.python.org/zh-cn/3/library/pathlib.html?highlight=pathlib
6.1.2.1创建路径
(1) 语法
# 导入路径类
from pathlib import Path# 相对路径
对象名 = Path(相对路径)
# 当前工作目录的绝对路径
对象名 = Path.cwd()
# 绝对路径 + 相对路径
对象名 = Path.cwd().joinpath("目录1","目录2")
6.1.2.2路径信息
对象名.absolute() # 绝对路径(路径类型)
对象名.name # 带后缀的完整文件名(str类型)
对象名.stem # 文件名不带后缀(str类型)
对象名.suffix # 文件后缀(str类型)
对象名.parent # 上一级路径(路径类型)
对象名.parts # 分割路径(tuple类型)
对象名.exists() # 路径是否存在(bool类型)
对象名.is_file() # 是否文件(bool类型)
对象名.is_dir() # 是否目录(bool类型)
对象名.is_absolute() # 是否绝对路径(bool类型)
对象名.stat().st_ctime # 创建时间(时间戳)
对象名.stat().st_atime # 访问时间(时间戳)
对象名.stat().st_mtime # 修改的时间(时间戳)
对象名.stat().st_size # 文件大小(字节Bete)
6.1.2.3搜索目录
(1) 语法
# 注意:路径对象必须是目录,不能是文件
# 搜索当前目录所有路径(一层)
生成器 = 对象名.iterdir():
# 根据通配符搜索当前目录所有路径(一层),*表示任意多个字符
# 例如:*.py表示所有Python文件
生成器 = path.glob("通配符"):
# 根据通配符递归搜索当前目录所有路径(多层)
生成器 = 对象名.rglob("通配符")
(2) 示例
# (当前目录为month01)
# 打印每天名称为demo的文件
for item in Path.cwd().glob(r"*/demo*"):print(item)# 打印所有后缀为.py的文件
list_file = Path.cwd().rglob(r"*.py"):print(item)
6.1.2.4新建路径
# 新建文件
对象名.touch()# 新建目录
对象名.mkdir()
对象名.mkdir(exist_ok=True) # 忽略目录存在时的报错
6.1.2.5重命名
(1) 语法
对象名.rename(新路径对象)
(2) 示例:修改month01\day03\homework\exercise01.py文件名称或后缀
# 修改前:day03/homework/exercise01.py
old_file = Path("day03", "homework", "exercise01.py")
new_file_name = old_file.with_name("new_exercise.py")
# 修改后:day03/homework/new_exercise.py
old_file.rename(new_file_name)
6.1.2.6删除路径
对象名.unlink() # 删除文件(永久删除,回收站不存在)
对象名.rmdir() # 删除目录(目录必须为空)
6.2 文件读写
读 :即从文件中获取内容
写 :即修改文件中的内容
基本步骤:打开文件,读写文件,关闭文件
官方文档:https://docs.python.org/zh-cn/3/library/functions.html?highlight=open#open
6.2.1文本文件
打开后会自动解码为字符,如txt文件,py文件。
6.2.1.1打开文件
(1) 语法
对象名 = open(文件路径,"操作模式",encoding="编码方式")
(2) 操作模式
(3) 编码方式
Linux操作系统文本文件默认为"utf-8"
Windows操作系统文本文件默认为"gbk"
6.2.1.2读写文件
(1) 读取
# 读取文件中指定数量字符
字符串 = 对象名.read(字符数) # 省略字符数将读取至文件末尾
# 读取文件中的每行
for 行 in 对象名:
(2) 写入
# 将字符串写入到文件
字符数 = 对象名.write(字符串)
6.2.1.3关闭文件
文件作为操作系统资源,打开后必须关闭,避免超出操作系统限制。
(1) close方法
对象名 = open(文件路径)
try:操作文件对象
finally:对象名.close()
(2) with操作
对try…finally语法的简化,当with代码块全部执行完后,无论是否产生异常,都会自动释放资源
with open(文件路径) as 对象名:通过对象名操作文件
6.2.2二进制文件
内部编码为二进制码,无法通过文字编码解析,如压缩包,音频,视频,图片等。
6.2.2.1打开文件
(1) 语法
对象名 = open(文件路径,"操作模式")
(2) 操作模式
6.2.2.2读写文件
(1) 读取
# 读取文件中指定数量字节
字节串 = 对象名.read(字节数) # 省略字节数将读取至文件末尾
(2) 写入
# 将字节串写入到文件
字节数 = 对象名.write(字节串)
(3) 字节串
以字节类型表达数据,处理二进程数据更方便。
6.2.1.3关闭文件
文件作为操作系统资源,打开后必须关闭,避免超出操作系统限制。
(1) close方法
对象名 = open(文件路径)
try:操作文件对象
finally:对象名.close()
(2) with操作
对try…finally语法的简化,当with代码块全部执行完后,无论是否产生异常,都会自动释放资源
with open(文件路径) as 对象名:通过对象名操作文件
相关文章:

【Python】高级进阶(专版提升3)
Python 1 程序结构1.1 模块 Module1.1.1 定义1.1.2 作用1.1.3 导入1.1.3.1 import1.1.3.2 from import 1.1.4 模块变量1.1.5 加载过程1.1.6 分类 1.2 包package1.2.1 定义1.2.2 作用1.2.3 导入1.1.3.1 import1.1.3.2 from import 2 异常处理Error2.1 异常2.2 处理 3 迭代3.1 可…...
LeetCode 1378、1277、2944
1378 二级排序,compare函数必须是static的 class Solution { public:struct node {int val;int priority;};static bool compare(const node &n1, const node &n2) {if (n1.priority n2.priority) {return n1.val < n2.val;}return n1.priority < n…...

【缓存常见问题】
在使用缓存时特别是在高并发场景下会遇到很多问题,常用的问题有缓存穿透、缓存击穿、缓存雪崩以及缓存一致性问题。 1、缓存穿透 首先,什么是缓存穿透呢? 缓存穿透是指请求一个不存在的数据,缓存层和数据库层都没有这个数据&…...

Python爬取猫眼电影票房 + 数据可视化
目录 主角查看与分析 爬取可视化分析猫眼电影上座率前10分析猫眼电影票房场均人次前10分析猫眼电影票票房占比分析 主角查看与分析 爬取 对猫眼电影票房进行爬取,首先我们打开猫眼 接着我们想要进行数据抓包,就要看网站的具体内容,通过按F12…...
Spring Boot深度解析:是什么、为何使用及其优势所在
在Java企业级应用开发的漫长历史中,Spring框架以其卓越的依赖注入和面向切面编程的能力,赢得了广大开发者的青睐。然而,随着技术的不断进步和项目的日益复杂,传统的Spring应用开发流程逐渐显得繁琐和低效。为了解决这一问题&#…...
面向对象——类与对象
文章目录 类与对象构造函数、析构函数get/set方法函数:类内声明、类外定义static 类与对象 #include<iostream> #include<string> using namespace std; /* 类与对象 */ class Person{public:string name;// 固有属性,成员变量 int age;pu…...
Golang的[]interface{}为什么不能接收[]int?
在 Go 中,[]interface{} 和 []int 是两种不同的类型,虽然它们的底层数据结构都是切片,但是它们的元素类型不同。[]interface{} 是一个空接口切片,可以容纳任意类型的元素,而 []int 是一个整数切片,只能容纳…...

重启服务器或重启docker,导致emqx的Dashboard的密码重置为public
最近在项目中突然发现重启服务器,或者重启docker 修改好的emqx的Dashboard的密码重置为public 技术博客 http://idea.coderyj.com/ 1.解决办法就是固定 emqx的节点 # 拉取镜像 docker pull emqx/emqx# 创建目录,进行目录挂载 mkdir -p /docker/emqx/{etc,lib,data,…...

就业班 第三阶段(ansible) 2401--4.16 day2 ansible2 剧本+角色
六、Ansible playbook 简介 playbook 是 ansible 用于配置,部署,和管理被控节点的剧本。 通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远端主机达到预期的状态。playbook 就像 Ansible 控制器给被控节点列出的的…...
常用的过滤网站扫描网站攻击的路径是那些,比如:/etc/passwd等
网站攻击中经常被尝试的路径主要包括利用漏洞获取敏感文件、执行系统命令或者注入恶意代码的尝试。以下是一些常见的被攻击者尝试访问的路径和文件,这些通常在网络入侵检测系统(IDS)和网络防火墙的过滤规则中被特别关注: 系统文件…...

考研数学|《1800》《660》《880》如何选择和搭配?(附资料分享)
直接说结论:基础不好先做1800、强化之前660,强化可选880/1000题。 首先,传统习题册存在的一个问题是题量较大,但难度波动较大。《汤家凤1800》和《张宇1000》题量庞大,但有些题目难度不够平衡,有些过于简单…...

论文笔记:Are Human-generated Demonstrations Necessary for In-context Learning?
iclr 2024 reviewer 评分 6668 1 intro 大型语言模型(LLMs)已显示出在上下文中学习的能力 给定几个带注释的示例作为演示,LLMs 能够为新的测试输入生成输出然而,现行的上下文学习(ICL)范式仍存在以下明显…...

C语言 | Leetcode C语言题解之第28题找出字符串中第一个匹配项的下标
题目: 题解: int strStr(char* haystack, char* needle) {int n strlen(haystack), m strlen(needle);if (m 0) {return 0;}int pi[m];pi[0] 0;for (int i 1, j 0; i < m; i) {while (j > 0 && needle[i] ! needle[j]) {j pi[j - …...
「Python大数据」数据采集-某东产品数据评论获取
前言 本文主要介绍通过python实现数据采集、脚本开发、办公自动化。数据内容范围:星级评分是1-3分、获取数据页面是前50页。 友情提示 法律分析:下列三种情况,爬虫有可能违法,严重的甚至构成犯罪: 爬虫程序规避网站经营者设置的反爬虫措施或者破解服务器防抓取措施,非法…...
ORACLE错误提示概述
OceanBase分布式数据库-海量数据 笔笔算数 保存起来方便自己查看错误代码。 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程…...
2024年4月13日美团春招实习试题【第一题:好子矩阵】-题目+题解+在线评测【模拟】
2024年4月13日美团春招实习试题【第一题:好子矩阵】-题目题解在线评测【模拟】 题目描述:输入描述输出描述样例 解题思路一:模拟解题思路二:思路二解题思路三:直接判断 题目描述: 塔子哥定义一个矩阵是”好矩阵”&…...

ssm057学生公寓管理中心系统的设计与实现+jsp
学生公寓管理中心系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本学生公寓管理中心系统就是在这样的大环境下诞生,其可以帮助管…...

循环神经网络(RNN):概念、挑战与应用
循环神经网络(RNN):概念、挑战与应用 1 引言 1.1 简要回顾 RNN 在深度学习中的位置与重要性 在深度学习的壮丽图景中,循环神经网络(Recurrent Neural Networks,RNN)占据着不可或缺的地位。自从…...

UML 介绍
前言 UML 简介。 文章目录 前言一、简介1、事务2、关系1)依赖2)关联聚合组合 3)泛化4)实现 二、类图三、对象图四、用例图五、交互图1、序列图(顺序图)2、通信图 六、状态图七、活动图八、构件图࿰…...
Pytorch——训练时,冻结网络部分参数的方法
一、原理: 要固定训练网络的哪几层,只需要找到这几层参数(parameter),然后将其 .requires_grad 属性设置为 False 即可。 二、代码: # 根据参数层的 name 来进行冻结 unfreeze_layers ["text_id"] # 用列表 # 设置冻…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...