3.python基础语法-上

news/2025/1/11 13:28:02/

文章目录

  • 1.常量和表达式
  • 2.变量和类型
    • 2.1.变量的语法
      • 2.1.1定义变量
      • 2.2.2使用变量
    • 2.2变量类型
      • 2.2.1整数
      • 2.2.2浮点数(小数)
      • 2.2.3字符串
      • 2.2.4布尔
      • 2.2.5其他
    • 2.3为什么要有这么多类型?
    • 2.4动态类型特性
  • 3.注释
    • 3.1注释是什么
    • 3.2注释的语法
      • 3.2.1注释行
      • 3.2.2文档字符串
    • 3.3注释的规范
  • 4.输入输出
    • 4.1和用户交互
    • 4.2通过控制台输出
    • 4.3通过控制台输入
  • 5.运算符
    • 5.1算术运算符
    • 5.2关系运算符
    • 5.3逻辑运算符
    • 5.4赋值运算符
  • 6.其他
  • 7.总结

大家好,我是晓星航。今天为大家带来的是 python基础语法-上 相关的讲解!😀

1.常量和表达式

我们可以把 Python 当成一个计算器, 来进行一些算术运算.

python">print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)

image-20241201162650920

注意:

  • print 是一个 Python 内置的 函数, 这个稍后详细介绍.
  • 可以使用 + - * / ( ) 等运算符进行算术运算. 先算乘除, 后算加减.
  • 运算符和数字之间, 可以没有空格, 也可以有多个空格. 但是一般习惯上写一个空格(比较美观).

形如 1 + 2 - 3 这样是算式, 在编程语言中称为 表达式, 算式的运算结果, 称为 表达式的返回值

其中 1, 2, 3 这种称为 字面值常量, + - * / 这种称为 运算符 或者 操作符.

注意:在python中,这里的2/3=0.6666666,而不是0。但是在c语言和Java中,整数除以整数还是整数,那么2/3=0。

示例:

给定四个分数, 67.5, 89.0, 12.9, 32.2 , 编写代码, 求这四个分数的平均数.

python">print( (67.5 + 89.0 + 12.9 + 32.2) / 4 )

image-20241201163645162

2.变量和类型

有的时候, 我们需要进行的计算可能更复杂一些, 需要把一些计算的中间结果保存起来. 这个时候就需要用 到 变量.

示例:

给定四个分数, 67.5, 89.0, 12.9, 32.2 , 编写代码, 求这四个分数的方差.

PS: 方差的计算过程: 取每一项, 减去平均值, 计算平方, 再求和, 最后除以 (项数 - 1)

在这个代码中, 就需要先计算这四个数字的平均值, 然后再计算方差. 这就需要把计算的平均值使用 变量 保存起来.

python">avg = (67.5 + 89.0 + 12.9 + 32.2) / 4
total = (67.5 - avg) ** 2 + (89.0 - avg) ** 2 + (12.9 - avg) ** 2 + (32.2 - avg) ** 2
result = total / 3
print(result)

image-20241201164245556

注意:

  • avg, total, result 均为变量. ** 在 Python 中表示乘方运算.
  • ** 2 即为求平方.

变量可以视为是一块能够容纳数据的空间. 这个空间往往对应到 “内存” 这样的硬件设备上.

PS: 我们可以把内存想像成是一个宿舍楼, 这个宿舍楼上有很多的房间. 每个房间都可以存放数据.

衡量内存的一个重要指标就是内存空间的大小, 比如我的电脑内存是 16GB. 这个数字越大, 意味着 内存的存储空间就越大, 能够存放的数据(变量) 就越多.

2.1.变量的语法

2.1.1定义变量

python">a = 10

创建变量的语句非常简单, 其中

  • a 为变量名. 当我们创建很多个变量的时候, 就可以用名字来进行区分.
  • = 为赋值运算符, 表示把 = 右侧的数据放到 = 左侧的空间中.

注意: 变量的名字要遵守一定规则.

硬性规则(务必遵守)

  • 变量名由数字字母下划线构成.
  • 数字不能开头.
  • 变量名不能和 “关键字” 重复.
  • 变量名大小写敏感. num 和 Num 是两个不同的变量名.

软性规则(建议遵守)

  • 变量名使用有描述性的单词来表示, 尽量表达出变量的作用.
  • 一个变量名可以由多个单词构成, 长一点没关系, 但是含义要清晰.
  • 当变量名包含多个单词的时候, 建议使用 “驼峰命名法”. 形如 totalCount , personInfo 这种, 除了首个单词外, 剩余单词首字母大写.

image-20241201172623138

数学上, 变量通常使用 x, y, z 这种简单的英文字母或者拉丁字母表示. 但是在编程中不建议这样使用.

原因是编程中, 一个程序里通常会同时创建出很多个变量. 如果只是使用单个字母表示, 在变量多了 的时候, 就很难记住哪个变量是干啥的, 从而给维护程序带来了一定的困难. 因此我们更建议使用带 有明确描述性的名字, 来表示变量的用途.

2.2.2使用变量

读取变量的值

python">a = 10
print(a)

修改变量的值

python">a = 20
print(a)

image-20241201172752661

注意: 在 Python 中, 修改变量也是使用 = 运算, 看起来和定义变量没有明显区别.

当然, 也可以用一个变量的值赋给另外一个变量.

python">a = 10
b = 20
a += b
print(a)
print(b)

image-20241201172837102

2.2变量类型

变量里面存储的不仅仅是数字, 还可以存储其它种类的数据. 为了区分不同种类的数据, 我们引入了 “类型” 这样的概念.

注意: 和 C++ / Java 等语言不同, Python 变量的类型不需要显式指定, 而是在赋值的时候确定的.

2.2.1整数

python">a = 10
print(type(a))

image-20241201173930011

PS: type 和 print 类似, 也是 python 内置的函数. 可以使用 type 来查看一个变量的类型.

注意: 和 C++ / Java 等语言不同, Python 的 int 类型变量, 表示的数据范围是没有上限的. 只要内存足够大, 理论上就可以表示无限大小的数据.

image-20241201174229845

2.2.2浮点数(小数)

python">a = 0.5
print(type(a))

image-20241201174017543

注意: 和 C++ / Java 等语言不同, Python 的小数只有 float 一种类型, 没有 double 类型. 但是实际上 Python 的 float 就相当于 C++ / Java 的 double, 表示双精度浮点数.

image-20241201174656657

PS: 关于单精度浮点数和双精度浮点数的问题, 我们此处不做过多讨论. 大家只要知道, 相比于单精度浮点数, 双精度浮点数占用的内存空间更多, 同时表示的数据精度更高即可(大概精确到小数点后 15 位).

2.2.3字符串

python">a = 'hello'
b = "world"
print(type(a))
print(type(b))

image-20241201174125269

使用 ’ ’ 或者 " " 引起来的, 称为 字符串. 可以用来表示文本.

注意: 在 Python 中, 单引号构成的字符串和双引号构成的字符串, 没有区别. 完全等价的.

可以使用 len 函数来获取字符串的长度.

python"> a = 'hello'print(len(a))

image-20241201175830814

可以使用 + 针对两个字符串进行拼接.

python">a = 'hello'
b = 'world'
print(a + b)
print(len(a + b))

image-20241201180048767

此处是两个字符串相加. 不能拿字符串和整数/浮点数相加.

字符串作为开发中最常用到的数据类型, 支持的操作方式也是非常丰富的. 此处暂时不详细展开.

单引号和双引号一起使用:

python">print("my name is xxh that 'who is xxh' ")

image-20241201175448938

如果一段字符串需要使用单引号又需要使用双引号,那么此时可以使用三引号:

python">f = '''My 'name' is "zhexingsun".'''
print(f)

image-20241201175722251

image-20241201180308157

python">a = 15
b = 'world'
print(a + b)

例如将一个整数和一个字符串相加就会报语法错误。

image-20241201180411184

2.2.4布尔

布尔类型是一个特殊的类型, 取值只有两种, True (真) 和 False (假).

PS: 布尔类型也是数学上的一个概念. 我们初中就学过一个概念叫做 “命题” , 进一步的就可以判定 命题的真假.

例如:

  • 宇将军真帅! (真命题)
  • 宇将军是个妹子 (假命题)
python"> a = Trueprint(type(a))b = Falseprint(type(b))

image-20241201180928997

布尔类型在咱们后续进行逻辑判断的时候, 是非常有用的.

2.2.5其他

除了上述类型之外, Python 中还有 list, tuple, dict, 自定义类型 等等

2.3为什么要有这么多类型?

(1) 类型决定了数据在内存中占据多大空间.

例如 float 类型在内存中占据 8 个字节.

PS: 计算机里面使用二进制来表示数据. 也就是每个位只能表示 0 或者 1.

1 个二进制位, 就称为是一个 "比特 ", 8 个二进制位, 就称为一个 "字节 " (Byte)

int 默认是 4 个字节,动态扩容

一个 float 变量在内存中占据 8 个字节空间, 也就是 64 个二进制位.

我的电脑有 16GB 的内存空间, 也就是一共有 1024 * 1024 * 1024 * 8 这么多的二进制位.

(2) 类型其实约定了能对这个变量做什么样的操作.

例如 int / float 类型的变量, 可以进行 + - * / 等操作

而 str 类型的变量, 只能进行 + (并且行为是字符串拼接), 不能进行 - * / , 但是还能使用 len 等其他操作.

总结: 类型系统其实是在对变量进行 “归类”. 相同类型的变量(数据) 往往具有类似的特性和使用规则.

2.4动态类型特性

在 Python 中, 一个变量是什么类型, 是可以在 “程序运行” 过程中发生变化的. 这个特性称为 “动态类型” .

python">a = 10
print(type(a))
a = 10.5
print(type(a))
a = 'hello'
print(type(a))
a = True
print(type(a))

image-20241201181629902

在程序执行过程中, a 的类型刚开始是 int, 后面变成了 float,然后变成string,最后变成bool.

C++/Java 这样的语言则不允许这样的操作. 一个变量定义后类型就是固定的了. 这种特性则称为 “静态类型”.

动态类型特性是一把双刃剑.

  • 对于中小型程序, 可以大大的解约代码量(比如写一段代码就可以同时支持多种类型).
  • 对于大型程序, 则提高了模块之间的交互成本. (程序猿 A 提供的代码难以被 B 理解).

3.注释

3.1注释是什么

注释是一种特殊的代码, 它不会影响到程序的执行, 但是能够起到解释说明的作用, 能够帮助程序猿理解程序代码的执行逻辑.

PS: 写代码是一件比较烧脑的事情, 读代码同样也非常烧脑. 相比于一板一眼的代码, 一些口语化的 描述能更好的帮助程序猿理解程序.

python"># 计算 4 个数字 67.5, 89.0, 12.9, 32.2 的方差
avg = (67.5 + 89.0 + 12.9 + 32.2) / 4
total = (67.5 - avg) ** 2 + (89.0 - avg) ** 2 + (12.9 - avg) ** 2 + (32.2 - avg) 
** 2
result = total / 3
print(result)

形如上述代码, 如果没有注释, 直接阅读, 是不容易 get 到代码的含义是计算方差. 但是通过加了一行注释解释一下, 就让人一目了然了.

PS: 代码的第一目标是容易理解, 第二目标才是执行正确.

写注释不光是为了方便别人来理解, 也是方便三个月之后的自己理解!

3.2注释的语法

Python 中有两种风格的注释.

3.2.1注释行

使用 # 开头的行都是注释.

python"># 这是一行注释.

3.2.2文档字符串

使用三引号引起来的称为 “文档字符串”, 也可以视为是一种注释.

  • 可以包含多行内容,
  • 一般放在 文件/函数/类 的开头.
  • “”" 或者 ‘’’ 均可 (等价).
python">"""
这是文档字符串
这是文档字符串
"""

3.3注释的规范

  1. 内容准确: 注释内容要和代码一致, 匹配, 并在代码修改时及时更新.
  2. 篇幅合理: 注释既不应该太精简, 也不应该长篇大论.
  3. 使用中文: 一般中国公司都要求使用中文写注释, 外企另当别论.
  4. 积极向上: 注释中不要包含负能量(例如 领导 SB 等).

4.输入输出

4.1和用户交互

程序需要和用户进行交互.

  • 用户把信息传递给程序的过程, 称为 “输入”.
  • 程序把结果展示给用户的过程, 称为 “输出”.

输入输出的最基本的方法就是控制台. 用户通过控制台输入一些字符串, 程序再通过控制台打印出一些字符串.

PyCharm 运行程序, 下方弹出的窗口就可以视为是控制台.

image-20241201182801578

windows 自带的 cmd 程序, 也可以视为是控制台

image-20241130231434479

输入输出的最常见方法是图形化界面. 如我们平时用到的 QQ, 浏览器, steam 等, 都不需要用户输入命令, 而只是通过鼠标点击窗口点击按钮的方式来操作.

Python 当然也可以用来开发图形化界面的程序. 但是图形化程序开发本身是一个大话题

4.2通过控制台输出

Python 使用 print 函数输出到控制台.

python">print('hello')
image-20241201183019733

不仅能输出一个字符串, 还可以输出一个其他类型的变量

python">a = 10
print(a)
b = True
print(b)
image-20241201183035515

更多的时候, 我们希望能够输出的内容是混合了字符串和变量的.

示例: 输出 num = 10

python">num = 10
print(f'num = {8}')
image-20241201183144399

注意:

  • 使用 f 作为前缀的字符串, 称为 f-string
  • 里面可以使用 { } 来内嵌一个其他的变量/表达式

PS: Python 中还支持其他的格式化字符串的方法, 咱们此处只了解这个最简单的即可

4.3通过控制台输入

python 使用 input 函数, 从控制台读取用户的输入.

python">num = 0
num = input('请输入一个整数: ')
print('你输入的整数是: {}'.format(num))
print(f'你输入的整数是: {num}')
print('你输入的整数是: %s' %num)

image-20241207224844746

注意:

  • input 的参数相当于一个 “提示信息”, 也可以没有.
  • input 的返回值就是用户输入的内容. 是字符串类型.
python">a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
print(f'a + b = {a + b}')

image-20241207231440794

此处的结果是字符串拼接, 不是算术运算. 如果要想进行算术运算, 需要先转换类型.

python">a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
a = int(a)
b = int(b)
print(f'a + b = {a + b}')

image-20241207231513886

通过 int( ) 把变量转成了 int 类型.

类似的, 使用 float( ), bool( ), str( ) 等可以完成对应的类型转换.

代码示例: 输入 4 个小数, 求 4 个小数的平均值.

python">a = input('请输入第一个数字: ')
b = input('请输入第二个数字: ')
c = input('请输入第三个数字: ')
d = input('请输入第四个数字: ')a = float(a)
b = float(b)
c = float(c)
d = float(d)avg = (a + b + c + d) / 4print(f'平均值: {avg}')

此处为了输入 4 个数字, 执行了四次 input. 如果是读取任意多个数字怎么办呢? 这个时候就需要用到循环了.

image-20241207231740013

5.运算符

5.1算术运算符

+ - * / % ** // 这种进行算术运算的运算符, 称为 算术运算符

注意1: / 中不能用 0 作为除数. 否则会 抛出异常

python">print(10 / 0)

image-20241207231828549

异常(这里的异常是抛出异常 ) 是编程语言中的一种常见机制, 表示程序运行过程中, 出现了一些 “意外情况”, 导致程序不能继续往下执行了.

注意2: 整数 / 整数 结果可能是小数. 而不会截断

python">print(1 / 2)

image-20241207231858194

除了python之外,大部分的编程语言,都是 整数除以整数,结果还是整数

注意3: % 不是 “百分数”, 而是求余数

python">print(7 % 2)

image-20241207231920777

关于求余数, 有些同学容易蒙. 其实这个是小学二年级数学就学过的.

7 除以 2 , 商是 3 , 余数是 1.

注意4: ** 是求乘方. 不光能算整数次方, 还能算小数次方.

python">print(4 ** 2)
print(4 ** 0.5)

image-20241207231945058

注意5: // 是取整除法(也叫地板除). 整数除以整数, 结果还是整数(舍弃小数部分, 并向下取整. 不是四舍五入)

python">print(7 // 2)
print(-7 // 2)

image-20241207232528387

这里的-7 // 2取整的方向是往-4的方向取整而不是-3方向(向下取整)

5.2关系运算符

< <= > >= == != 这一系列的运算符称为 关系运算符, 它们是在比较操作数之间的关系. (先算乘方,然后算乘除,最后算加减,加上() 的运算优先计算)

其中

  • <= 是 “小于等于”
  • >= 是 “大于等于”
  • == 是 “等于”
  • != 是 “不等于”

(1) 如果关系符合, 则表达式返回 True. 如果关系不符合, 则表达式返回 False

python">a = 10
b = 20print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

image-20241208170016398

(2) 关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较

python">a = 'hello'
b = 'world'print(a < b)
print(a <= b)
print(a > b)
print(a >= b)
print(a == b)
print(a != b)

image-20241208170125634

注意:

  • 直接使用 == 或者 != 即可对字符串内容判定相等. (这一点和 C / Java 不同).
  • 字符串比较大小, 规则是 “字典序”

关于字典序:

想象一个英文词典, 上面的单词都是按照字母顺序排列. 如果首个字母相同, 就比较第二个字母. (就比如著名单词 abandon).

我们认为一个单词在词典上越靠前, 就越小. 越靠后, 就越大.

(3) 对于浮点数来说, 不要使用 == 判定相等.

python">print(0.1 + 0.2 == 0.3)

image-20241208170754943

注意: 浮点数在计算机中的表示并不是精确的! 在计算过程中, 就容易出现非常小的误差.

那么如何判断两个浮点数是否相等呢?

python">a = 0.1 + 0.2
b = 0.3
print(-0.000001 < (a-b) < 0.000001)

image-20241208171135578

正确的浮点数比较,作差,看差值是否小于预期的误差范围。

image-20241208171250455

python">print(0.1)
print(0.2)
print(0.3)
print(0.1 + 0.2)

image-20241208170850064

可以看到, 0.1 + 0.2 的结果并非是 0.3 , 而是带了个小尾巴. 虽然这个尾巴非常小了, 但是 == 锱铢必较的, 仍然会导致 == 的结果为 False.

不止是 Python 如此, 主流编程语言都是如此. 这个是 IEEE754 标准规定的浮点数格式所引入的问 题. 此处我们不做过多讨论

正确的比较方式: 不再严格比较相等了, 而是判定差值小于允许的误差范围.

python">a = 0.1 + 0.2
b = 0.3
print(-0.000001 < (a - b) < 0.000001)

实际工程实践中, 误差在所难免, 只要保证误差在合理范围内即可

5.3逻辑运算符

and or not 这一系列的运算符称为 逻辑运算符.

  • and 并且. 两侧操作数均为 True, 最终结果为 True. 否则为 False. (一假则假)
  • or 或者. 两侧操作数均为 False, 最终结果为 False. 否则为 True. (一真则真)
  • not 逻辑取反. 操作数本身为 True, 则返回 False. 本身为 False, 则返回 True.

此处说的 “并且” 和 “或者”, 就是我们日常生活中使用的 “并且” 和 “或者”.

想象一下未来丈母娘问你要彩礼, 什么叫做 “有房并且有车”, 什么叫做 “有房或者有车”.

python">a = 10
b = 20
c = 30print(a < b and b < c)
print(a < b and b > c)print(a > b or b > c)
print(a < b or b > c)print(not a < b)
print(not a > b)

image-20241208171853812

一种特殊写法

a < b and b < c 这个操作等价于 a < b < c . 这个设定和大部分编程语言都不相同. 在python中这两种写法都成立

关于短路求值

和其他编程语言类似, Python 也存在短路求值的规则.

  • 对于 and, 如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行.
  • 对于 or, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行.
python">print(10 > 20 and 10 / 0 == 1)
print(10 < 20 or 10 / 0 == 1)

image-20241208172724827

上述代码没有抛出异常, 说明右侧的除以 0 操作没有真正执行.

5.4赋值运算符

1.= 的使用

= 表示赋值. 这个我们已经用过很多次了. 注意和 == 区分.

= 除了基本的用法之外, 还可以同时针对多个变量进行赋值.

链式赋值

python">a = b = 10

多元赋值

python">a, b = 10, 20

代码实例: 交换两个变量

基础写法

python">a = 10
b = 20tmp = a
a = b
b = tmp

此时a = 20,b = 10

基于多元赋值

python">a = 10
b = 20a, b = b, a

此时的a = b = 20, b = a = 10

(2) 复合赋值运算符

Python 还有一些 复合赋值运算符. 例如 += -= *= /= %=

其中 a += 1 等价于 a = a + 1 . 其他复合赋值运算符也是同理.

python">a = 10
a = a + 1
print(a)b = 10
b += 1
print(b)

image-20241208173420598

注意: 像 C++ / Java 中, 存在 ++ -- 这样的自增/自减运算符. Python 中则不支持这种运算(因为python中把+和-当成了正号和负号). 如果需要使用, 则直接使用 += 1 或者 -= 1

++ -- 最大的问题就是容易分不清前置和后置的区别. 这一点 Python 语法在设计的时候就进行了 规避, 避免出现这种不直观, 并且容易混淆的语法.

6.其他

除了上述之外, Python 中还有一些运算符, 比如 身份运算符 (is, is not), 成员运算符 (in, not in), 位运算符 ( & | ~ ^ << >>) 等.

7.总结

本章节中我们学习了 Python 中的最基础的语法部分

  • 常量
  • 变量
  • 类型
    • 整数
    • 浮点数
    • 字符串
    • 布尔值
  • 注释
  • 输入输出
  • 运算符
    • 算术运算符
    • 关系运算符
    • 逻辑运算符
    • 赋值运算符
python">a = 10
b = 20a, b = b, a

此时的a = b = 20, b = a = 10

(2) 复合赋值运算符

Python 还有一些 复合赋值运算符. 例如 += -= *= /= %=

其中 a += 1 等价于 a = a + 1 . 其他复合赋值运算符也是同理.

python">a = 10
a = a + 1
print(a)b = 10
b += 1
print(b)

[外链图片转存中…(img-9MifXCAf-1736512019604)]

注意: 像 C++ / Java 中, 存在 ++ -- 这样的自增/自减运算符. Python 中则不支持这种运算(因为python中把+和-当成了正号和负号). 如果需要使用, 则直接使用 += 1 或者 -= 1

++ -- 最大的问题就是容易分不清前置和后置的区别. 这一点 Python 语法在设计的时候就进行了 规避, 避免出现这种不直观, 并且容易混淆的语法.

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘


http://www.ppmy.cn/news/1562240.html

相关文章

Python基于YOLOv8和OpenCV实现车道线和车辆检测

使用YOLOv8&#xff08;You Only Look Once&#xff09;和OpenCV实现车道线和车辆检测&#xff0c;目标是创建一个可以检测道路上的车道并识别车辆的系统&#xff0c;并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…

ASP.NET Core 实现微服务 -- Polly 服务降级熔断

在我们实施微服务之后&#xff0c;服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败&#xff0c;进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理&#xff1…

从configure.ac到构建环境:解析Mellanox OFED内核模块构建脚本

在软件开发过程中,特别是在处理复杂的内核模块如Mellanox OFED(OpenFabrics Enterprise Distribution)时,构建一个可移植且高效的构建系统至关重要。Autoconf和Automake等工具在此过程中扮演着核心角色。本文将深入解析一个用于准备Mellanox OFED内核模块构建环境的Autocon…

4 $ 符号

引用变量 普通变量&#xff1a;使用 $ 符号引用变量的值。name"John" echo "Hello, $name" # 输出: Hello, John特殊参数 $#&#xff1a;传递给脚本的参数个数。 echo "Number of arguments: $#"$0&#xff1a;脚本的名称。 echo "Script …

Java Spring Boot实现基于URL + IP访问频率限制

点击下载《Java Spring Boot实现基于URL IP访问频率限制(源代码)》 1. 引言 在现代 Web 应用中&#xff0c;接口被恶意刷新或暴力请求是一种常见的攻击手段。为了保护系统资源&#xff0c;防止服务器过载或服务不可用&#xff0c;需要对接口的访问频率进行限制。本文将介绍如…

C++例程:使用I/O模拟IIC接口(6)

完整的STM32F405代码工程I2C驱动源代码跟踪 一&#xff09;myiic.c #include "myiic.h" #include "delay.h" #include "stm32f4xx_rcc.h" //初始化IIC void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphCl…

php.ini配置中有10处设置不当,会使网站存在安全问题

在 php.ini 配置文件中,有一些设置如果配置不当,可能会导致网站面临安全风险。PHP 的安全性很大程度上依赖于这些配置选项的正确设置。以下是 10 个可能存在安全问题的 PHP 配置项,如果配置不当,可能会导致网站存在安全漏洞: 1. display_errors 问题: 启用错误显示时,…

【Oracle篇】深入了解执行计划中的访问路径(含表级别、B树索引、位图索引、簇表四大类访问路径)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…