当前位置: 首页 > news >正文

AutoCV第二课:Python基础

目录

  • Python基础
    • 前言
    • 1.流程控制
      • 1.1 条件语句
      • 1.2 循环语句
        • 1.2.1 while循环语句
        • 1.2.2 for循环语句
      • 1.3 作业
      • 1.4 拓展-try except语法
    • 2.函数
      • 2.1 函数定义
      • 2.2 函数的参数
        • 2.2.1 位置参数
        • 2.2.2 命名参数
        • 2.2.3 默认参数
        • 2.2.4 可变参数
        • 2.2.5 参数展开
      • 2.3 递归函数
        • 2.3.1 递归函数定义
        • 2.3.2 斐波拉契数列实现
      • 2.4 作业
      • 2.5 匿名函数
        • 2.5.1 定义
        • 2.5.2 拓展-sorted()函数
    • 总结

Python基础

前言

手写AI推出的全新保姆级从零手写自动驾驶CV课程,链接。记录下个人学习笔记,仅供自己参考。

本次课程为第二课,主要讲解Python中的流程控制(条件和循环语句)以及函数(定义和函数参数)

课程大纲可看下面的思维导图。

在这里插入图片描述

1.流程控制

内容:认识控制流程,判断、循环

1.1 条件语句

Python中的条件语句包括if、elif和else关键字if语句的基本语法如下:

if condition1:statement
elif condition2:statement
elif condition3:statement
else:statement

1.2 循环语句

1.2.1 while循环语句

Python中的while循环语句用于重复执行一段代码,直到条件变为False为止,while的基本语法如下:

while condition:statement

while循环语句可以和break语句一起使用来提前结束循环

1.2.2 for循环语句

Python中的for循环语句可以对序列和可迭代对象进行遍历,语法格式如下:

for variable in Iterator:statement

其中,Iterator指的是支持迭代操作的对象,包括字符串、列表、元组、集合、字典等。variable是在每次循环中接收可迭代对象中的元素。

示例代码如下,遍历整数序列求和:

sum = 0
for i in range(1, 11):sum += i
print("1到10的和为:", sum)

此外,for循环语句还支持breakcontinue关键字,同于控制循环的执行流程。break用于终止整个循环,continue用于跳过当前循环,进入下一次循环。

for还可以和列表进行其它的配合,如

  1. list = [i for i in iterator]

这种方式使用了列表推导式,通过对iterator进行遍历,生成一个新的列表

  1. list = [i for i in range(0, 5, 2) if i != 4]

这种方式是在列表推导式的基础上,添加了一个条件表达式

1.3 作业

作业4:写一个计算器,输入表达式,输出计算结果
运行效果如下:

在这里插入图片描述

示例代码如下:

# 两数的四则运算
while True:# 获取输入表达式expression = input("mycalc>")# 获取+、-、*、/operators = '+-*/'index = [i for i in range(len(expression)) if expression[i] in operators]# 如果存在四则运算符if index:num1 = int(expression[:index[0]])num2 = int(expression[index[0]+1:])if expression[index[0]] == "+":print(num1+num2)elif expression[index[0]] == "-":print(num1-num2)elif expression[index[0]] == "*":print(num1*num2)elif expression[index[0]] == "/" and num2 != 0:print(num1/num2)else:print("Error, divisor cannot be zero! Please try again")

优化:使用函数封装以及try except优化,示例代码如下(Suggestion from chatGPT)

def add(num1, num2):return num1 + num2def subtract(num1, num2):return num1 - num2def multiply(num1, num2):return num1 * num2def divide(num1, num2):if num2 == 0:raise ValueError("Error, divisor cannot be zero!")return num1 / num2if __name__ == "__main__":while True:# 获取表达式expression = input("mycala>")# 获取+、-、*、/operators = '+-*/'index = [i for i in range(len(expression)) if expression[i] in operators]# 如果存在四则运算符if index:num1 = int(expression[:index[0]])num2 = int(expression[index[0]+1:])operator = expression[index[0]]# 根据不同的运算符调用不同的函数进行计算try:if operator == "+":result = add(num1, num2)elif operator == "-":result = subtract(num1, num2)elif operator == "*":result = multiply(num1, num2)elif operator == "/":result = divide(num1, num2)print(result)except ValueError as e:print(e)

继续优化:

  1. 输入的表达式只能包含两个操作数,不能进行多个数的计算
  2. 多个表达式意味着需要考虑*和/的优先级,复杂度提高

优化的示例代码如下:(from chatGPT)

while True:# 获取表达式并去除空格expression = input("mycalc>")# 使用eval函数计算表达式try:result = eval(expression)print(result)except ZeroDivisionError:print("Error, divisor cannot be zero! Please try again")except:print("Invalid expression! Please try again")

说明

  • eval函数可以将包含数学运算符的字符串转换为实际的数学运算结果
  • try except是Python中异常处理的语法结构,用于处理可能会出现的异常代码块。

1.4 拓展-try except语法

try except是Python中异常处理的语法结构,用于处理可能会出现的异常代码块。具体来说try语句包含了要尝试执行的代码块,而except语句包含了在出现异常时要执行的代码块。如果在try代码块中出现了异常,那么程序会跳转到except代码块,并执行其中的代码。

try语句的基本结构如下:

try:# 尝试执行的代码块
except:# 发生异常时要执行的代码块

其中except可以指定不同的异常类型,以便更精确地处理异常。例如,下面代码处理了除以零异常:

try:x = 1 / 0
except ZeroDivisionError:print("除以零错误!")

除了指定具体的异常类型之外,也可以使用except语句来捕获所以异常,例如:

try:# 尝试执行的代码块
except Exception as e:# 发生异常时要执行的代码块

except中,可以使用as关键字来将异常对象赋值给一个变量,以便更详细地了解异常信息。

此外,还可以使用else来指定在没有发生异常时要执行的代码块,例如:

try:# 尝试执行的代码块
except:# 发生异常时要执行的代码块
else:# 没有发生异常时要执行的代码块

最后,还可以使用finally子句来指定不管是否发生异常都要执行的代码块,例如:

try:# 尝试执行的代码块
except:# 发生异常时要执行的代码块
finally:# 不管是否发生异常都要执行的代码块

这在需要释放资源或清理状态时非常有用

2.函数

内容:认识函数的定义、位置参数和命名参数、可变参数、参数的展开(from chatGPT)

2.1 函数定义

在Python中,函数的定义需要使用def关键字,基本的语法格式如下:

def function_name(parameter_list):"""Docstring"""# Function Bodyreturn expression

其中:

  • function_name是函数的名称,必须符合Python的标识规则,通常使用小写字母和下划线组成,不推荐使用与Python内置函数和关键字相同的名称
  • parameter_list是函数的参数列表,可以有零个或多个参数,多个参数之间用逗号分隔。参数可以是位置参数(必选参数)或关键字参数(可选参数)
  • Docstring是函数的文档字符串,用于描述函数的功能和使用方法,通常使用三引号"""包围
  • return语句用于返回函数的执行结果

示例如下:

def sum_numbers(*numbers):"""计算任意数量的数值的和"""sum = 0for n in numbers:sum += nreturn sum# 调用函数
result = sum_numbers(1, 2, 3, 4, 5)
print(result)   # 15

2.2 函数的参数

在Python中,函数参数可分为四种类型:位置参数、命名参数、默认参数和可变参数

2.2.1 位置参数

位置参数是指函数调用时按照定义的位置传递的参数。例如:

def func(a, b):print(a, b)func(1, 2)  # 输出: 1 2

在这个例子中,参数1被传递给了a,参数2被传递给了b。由于参数的位置是固定的,所以这些参数被称为位置参数。

2.2.2 命名参数

在Python中,还可以使用命名参数(关键字参数)指定参数的值,而不需要按照函数定义时参数的位置进行传递,例如:

def func(a, b):print(a, b)func(b=2, a=1)  # 输出: 1 2

在这个例子中,我们通过b=2a=1来指定参数的值。因为参数的值是根据名称指定的,所以这些参数被称为命名参数。

2.2.3 默认参数

默认参数是指在定义函数时为参数提供默认值,如果在调用函数时没有指定参数的值,就使用默认值。例如:

def func(a=1, b=2):print(a, b)func()         # 输出: 1 2
func(3)        # 输出: 3 2
func(b=5)      # 输出: 1 5
func(6, b=7)   # 输出: 6 7

在这个例子中,参数a的默认值为1,参数b的默认值为2。如果没有指定参数的值,则使用默认值。如果指定了某些参数的值,则只有指定的参数会使用这些值,而其它参数仍然使用默认值。

2.2.4 可变参数

可变参数是指能够接受不定数量的参数的函数。在Python中,有两种类型的可变参数:*args**kwargs

*args:接受不定数量的位置参数,这些参数被组合成一个元组。例如:

def func(*args):print(args)func(1, 2)   # 输出: (1, 2)

在这个例子中,参数1,2被组合成了一个元组,并作为参数传递给函数func()

**kwargs:接受不定数量的关键字参数,这些参数被组合成一个字典。例如:

def func(**kwargs):print(kwargs)func(a=1, b=2)  # 输出: {'a': 1, 'b': 2}

在这个例子中,参数a,b被组合成了一个字典,并作为参数传递给函数func()

2.2.5 参数展开

在Python中,使用展开操作符***可以将可迭代对象(例如列表、元组、字典等)中的元素展开成函数的参数,用于函数调用。

*可以将一个可迭代对象中的元素展开为位置参数,传递给函数。例如:

def my_func(a, b):print(a, b)my_list = [1, 2]
my_func(*my_list)  # 输出:1 2

**可以将一个字典中的键值对展开成关键字参数,传递给函数。例如:

def my_func(a, b):print(a, b)my_dict = {'a': 1, 'b': 2}
my_func(**my_dict)  # 输出:1 2

***可以混合使用将位置参数和关键字参数同时展开。例如:

def my_func(a, b, c):print(a, b, c)my_list = [1, 2]
my_dict = {'c': 3}
my_func(*my_list, **my_dict)  # 输出:1 2 3

2.3 递归函数

2.3.1 递归函数定义

Python中的递归函数指在函数内部调用自身的函数。递归函数通常需要满足两个条件:基本情况和递归情况。基本情况指满足某个条件时直接返回结果,递归情况则是指在函数内部调用自身,通常是将问题规模缩小到一个更小的子问题。

例如,下面的代码时一个求阶乘的递归函数:

def factorial(n):if n == 1:return 1else:return n * factorial(n-1)

在上述代码中,当n等于1时,直接返回1,这就是基本情况。递归情况则是将问题规模缩小到n-1的阶乘,这里通过factorial(n-1)实现。递归函数的执行过程是将问题不断地拆分成更小的子问题,直到最终的基本情况被满足,然后将所有子问题结果合并起来得到最终的结果。

2.3.2 斐波拉契数列实现

定义:斐波拉契数列是一个非常经典的数列,它的前两项为0和1,从第三项开始,每一项都是前两项的和,即0,1,1,2,3,5,8,13,…

实现:斐波拉契数列的实现包含循环和递归两种方法

实现1.循环方法

def fibonacci1(n):if n<=1:return nelse:fib_list = [0, 1]for i in range(2, n+1):fib_list.append(fib_list[-1] + fib_list[-2])return fib_list

实现2.递归方法

def fibonacci(n):if n == 1:return [0, 1]else:fib_list = fibonacci(n-1)fib_list.append(fib_list[-1] + fib_list[-2])return fib_list

递归函数是指在函数中调用函数本身的一种技术。代码简单但看得有点迷糊,自己画了个简单图示并理解了下(不知道理解是否正确😂)

递归就是一个套娃的过程,为了便于理解画了个图示,假设此时n=5,不同的颜色来表示不同的flib函数,

  1. n=5时,调用灰色的fib函数,程序运行到第5行进入新的fib函数(套的第一层)
  2. 新的fib函数即n=4.,也就是蓝色的fib函数,同理运行到第5行又进入新的fib函数(套的第二层)
  3. 继续上述过程,n=3,也就是绿色的fib函数,运行到第5行跳转(套的第三层)
  4. 继续,n=2,也就是橙色的fib函数,运行到第5行跳转(套的第四层)
  5. 继续,n=1,也就是黄色的fib函数,此时满足条件n==1,返回[0,1]的一个列表
  6. 开始往回走了,n=2,此时fib_list=[0,1],运行到第六行fib_list=[0,1,1],将结果返回到上一层(脱的第一层)
  7. n=3,此时fib_list=[0,1,1],运行到第六行fib_list=[0,1,1,2],继续将结果返回到上一层(脱的第二层)
  8. n=4,此时fib_list=[0,1,1,2],运行到第六行fib_list=[0,1,1,2,3],继续返回给上一层(脱的第三层)
  9. n=5,此时fib_list=[0,1,1,2,3],运行到第六行fib_list=[0,1,1,2,3,5],将最终的结果返回(脱的第四层)

在这里插入图片描述

递归图示

2.4 作业

作业5:定义一个函数extract(text, begin_token, end_token),返回text中,以begin_token开始end_token结束的中间内容

示例代码如下:

def extract(text, begin_token, end_token):begin_index = text.find(begin_token)end_index = text.find(end_token)return text[begin_index+len(begin_token):end_index]print(extract("爱听歌的周同学呀", "爱听歌的", "呀"))

运行效果如下:

在这里插入图片描述

存在的问题:(from chatGPT)

    1. 当begin_token或end_token不在text中时,会返回错误的结果
    1. begin_token和end_token必须按照顺序一次出现在text中,否则无法正确提取中间内容。

优化

def extract(text, begin_token, end_token):begin_index = text.find(begin_token)if begin_index == -1:raise ValueError("begin_token not found")end_index = text.find(end_token, begin_index+len(begin_token))if end_index == -1:raise ValueError("end_token not found")return text[begin_index+len(begin_token):end_index]print(extract("我爱Python,Python是一门很有用的语言", "Python", "语言"))

2.5 匿名函数

2.5.1 定义

Python中的匿名函数又称为lambda函数,是一种不需要定义函数名的函数。lambda函数的语法如下:

lambda arguments: expression

其中arguments表示函数的参数,可以有多个,使用逗号分隔。expression表示函数的表达式,可以是任何有效的表达式。lambda函数的返回值是一个函数对象。

lambda函数的简单示例如下:

sum = lambda x, y: x + y
print(sum(3, 5))	# 输出:8

在这个例子中,我们创建了一个lambda函数,将它赋值给了变量sum。这个函数接受两个参数x和y,共返回它们的和。我们通过调用sum(3,5)来调用这个函数,并输出结果8。

lambda函数通常用于需要简单函数的场景,可以简化代码,并提高代码的可读性。例如,使用lambda函数对列表进行排序:

data = [('apple', 3), ('banana', 2), ('orange', 4)]
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data)	# 输出:[('banana', 2), ('apple', 3), ('orange', 4)]

在这个例子中,我们使用了lambda函数作为sorted()函数的key参数,以元组的第二个元素作为排序的关键字。

不由的想起检测器的NMS算法之前需要将boxes按照置信度的大小进行排序,其代码如下:

...# boxes-->[1,25200,85]  box->[left, top, right, bottom, confidence, img_id, label]
boxes = sorted(boxes.tolist(), key=lamda x:x[4], reverse=True)return NMS(boxes)
...

2.5.2 拓展-sorted()函数

在Python中,Sorted()函数用于对可迭代对象进行排序,返回一个新的已排序的列表,而不改变原始对象。

sorted()函数有以下几个参数:

  • iterable:必选参数,表示要排序的可迭代对象,可以是列表、元组、集合、字典等
  • key:可选参数,表示用于排序的关键字函数,用于比较两个元素的大小关系。默认值为None,表示使用元素本身的值进行比较。
  • reverse:可选参数,表示是否降序排列。默认值为False,表示升序排列。

sorted()函数使用示例如下:

# 对列表进行升序排列
nums = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_nums = sorted(nums)
print(sorted_nums)  # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]# 对字典按值进行升序排列
d = {'apple': 3, 'banana': 2, 'orange': 4}
sorted_d = sorted(d.items(), key=lambda x: x[1])
print(sorted_d)  # [('banana', 2), ('apple', 3), ('orange', 4)]

上面的代码中,第一个示例是对列表进行排序,不需要使用关键字函数key。第二个示例是对字典按值进行排序,使用了关键字函数key,并且使用匿名函数lambda来定义比较元素大小的规则,即按照每个元素的第二个值进行升序排列。其中d.items()方法将字典转换为元组列表。

总结

本次课程内容方面主要学习了Python中的流程控制和函数,流程控制方面掌握了for与列表构成带条件的列表推导式,同时回顾了Python中异常处理的语法结构try excepy。函数方面掌握了各种传递函数参数的方法,以及两种特殊的函数:递归函数和匿名函数。

相关文章:

AutoCV第二课:Python基础

目录Python基础前言1.流程控制1.1 条件语句1.2 循环语句1.2.1 while循环语句1.2.2 for循环语句1.3 作业1.4 拓展-try except语法2.函数2.1 函数定义2.2 函数的参数2.2.1 位置参数2.2.2 命名参数2.2.3 默认参数2.2.4 可变参数2.2.5 参数展开2.3 递归函数2.3.1 递归函数定义2.3.2…...

LeetCode算法 打家劫舍 和 打家劫舍II C++

目录题目 打家劫舍参考答案题目 打家劫舍II参考答案题目 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯…...

蓝桥杯刷题冲刺 | 倒计时10天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.有边数限制的最短路2.九进制转十进制1.有边数限制的最短路 题目 链接&#xff1a; 853. 有边数…...

个人练习-Leetcode-剑指 Offer II 109. 开密码锁

题目链接&#xff1a;https://leetcode.cn/problems/zlDJc7/ 题目大意&#xff1a;给出一个四位数字的密码锁&#xff0c;初始状态是0000&#xff0c;目标是targer。每一次转动只能让一个位的轮盘转动一下&#xff08;0往后转是9&#xff09;。有一个vector<string> dea…...

四个常见的Linux面试问题

四个常见的Linux面试问题。 刚毕业要找工作了&#xff0c;只要是你找工作就会有面试这个环节&#xff0c;那么在面试环节中&#xff0c;有哪些注意事项值得我的关注呢&#xff1f;特别是专业技术岗位&#xff0c;这样的岗位询问一般都是在职的工程师&#xff0c;如何在面试环节…...

15、接口(C#)

15.1 什么是接口 接口是指定一组函数成员而不实现它们的引用类型。所以只能类和结构实现接口。 15.2 声明接口 接口声明不能包含以下成员 数据成员静态成员 接口声明只能包含以下类型的费静态成员函数声明&#xff1a; 方法事件索引器属性 这些函数成员的声明不能包含任何实…...

C++中常见的容器类使用方法举例(vector、deque、map、set)

cpp中常见的容器类有vector、list、deque、map、set、unordered_map和unordered_set。 下面将举例直接说明各个容器的使用方法。 文章目录综合示例1. vector&#xff1a;动态数组&#xff0c;支持随机访问2. list&#xff1a;双向链表&#xff0c;支持双向遍历和插入删除3. de…...

什么是强缓存和协商缓存

什么是缓存 浏览器缓存就是把一个已经请求过的Web资源&#xff08;如html页面&#xff0c;图片&#xff0c;js&#xff0c;数据等&#xff09;拷贝一份副本储存在浏览器中。缓存会根据进来的请求保存输出内容的副本。当下一个请求来到的时候&#xff0c;如果是相同的URL&#…...

算法刷题之堆

1. heapq 堆 Python 中只有最小堆&#xff1a; import heapqa [] heapq.heappush(a, 3) # 添加元素 heapq.heappush(a, 2) heapq.heappush(a, 1) while len(a): # 判断堆的长度print(heapq.heappop(a)) # 弹出堆顶元素# 将列表转换为最小堆 nums [2, 3, 1, 4, 5, 6] hea…...

javaweb导师选择系统

本文以JSP为开发技术&#xff0c;实现了一个导师选择系统。导师选择系统分为三大模块&#xff0c;包括管理员&#xff1a;学员信息管理、导师信息管理、导师选择管理、导师分布图、公告信息管理、系统管理&#xff0c;学生&#xff1a;个人资料管理、导师选择管理、导师分布图管…...

LeetCode150 逆波兰表达式求值

题目&#xff1a; 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。每个操作数&#xff08;运算对象&#xff09;都可以…...

【Node.js】项目开发实战(中)

开发用户的注册和登录接口步骤1&#xff0c;打开MySQL Workbench&#xff0c;打开自己的数据库进入创建用户信息表新建 ev_users表安装并配置mysql模块安装mysql模块新建db文件夹下index.js,导入并配置mysql模块安装bcryptjs对密码进行加密处理新建/router_handler/user.js中&a…...

记录一次 New Bing 英语陪练

记录一次 New Bing 英语陪练 Now I start to speak english to chat with you . Help me find the mistake in my word and help me improve my english I’m glad you want to practice your English with me. I can help you find the mistakes in your words and help you i…...

【Python】照片居然能变素描?不会画画但是咱会代码

文章目录前言一、准备二、下载预训练模型总结前言 Photo-Sketching 一个能将照片的轮廓识别出来并将其转化为“速写”型图像的开源模块。 比如&#xff0c;这只小狗&#xff1a; 经过模型的转化&#xff0c;会变成卡通版的小狗&#xff1a; 非常秀&#xff0c;这很人工智能…...

已解决正确配置git环境变量

已解决git没有配置环境变量&#xff0c;抛出异常ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH?&#xff0c;附上正确配置git环境变量的教程 文章目录报错问题报错翻译报错原因解决方法《100天精通Python》专栏推荐白嫖80g Python全栈…...

【逐步剖C】-第十章-自定义类型之结构体、枚举、联合

一、结构体 前言&#xff1a;有关结构体的声明、定义、初始化以及结构体的传参等结构体的基本使用在文章【逐步剖C】-第六章-结构体初阶中已进行了详细的介绍&#xff0c;需要的朋友们可以看看。这里主要讲解的是有关结构体的内存问题。 1. 结构体的内存对齐 &#xff08;1&…...

Windows Server 2016 中文版、英文版下载 (updated Mar 2023)

Windows Server 2016 Version 1607&#xff0c;2023 年 3 月更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2016/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 本站将不定期发布官方原版风格月度更…...

Linux 4G 通信实验

目录4G 网络连接简介高新兴ME3630 4G 模块实验ME3630 4G 模块简介ME3630 4G 模块驱动修改ME3630 4G 模块ppp 联网测试前面我们学习了如何在Linux 中使用有线网络或者WIFI&#xff0c;但是使用有线网络或者WIFI 有 很多限制&#xff0c;因为要布线&#xff0c;即使是WIFI 你也得…...

华为OSPF技术详细介绍,保姆级,谁都能看懂(一)

目录 1、简介 2、OSPF基本原理 3、OSPF的特点 4、OSPF区域 5、路由器的类型 6、OSPF5种报文 7、后半部分内容 1、简介 OSPF&#xff08;Open Shortest Path First&#xff0c;开放最短路径优先&#xff09;是一个基于链路状态的内部网关协 议。目前针对IPv4协议使用的是OS…...

行人车辆检测与计数系统(Python+YOLOv5深度学习模型+清新界面)

摘要&#xff1a;行人车辆检测与计数系统用于交通路口行人及车辆检测计数&#xff0c;道路人流量、车流量智能监测&#xff0c;方便记录、显示、查看和保存检测结果。本文详细介绍行人车辆检测&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的实现代码、PyQt的UI界面…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...