Python----Python高级(函数基础,形参和实参,参数传递,全局变量和局部变量,匿名函数,递归函数,eval()函数,LEGB规则)

7e76e20f81694cc09557d2e3a079896f.png

一、函数基础

1.1、函数的用法和底层分析

函数是可重用的程序代码块。

函数的作用,不仅可以实现代码的复用,更能实现代码的一致性。一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现。

ef8a10b48ff44127878e9c50cd262326.png

在编写函数时,函数体中的代码写法和我们前面讲述的基本一致,只是对代码实现了封装,并增加了函数调用、传递参数、返回计算结果等内容。 

 1.2、函数简介

1.2.1函数的基本概念

一个程序由一个一个的任务组成;函数就是代表一个任务或者一个功能(function)。

函数是代码复用的通用机制

1.2.2、函数的分类

aae363020b37410298189c93d3eff199.png

内置函数

        我们前面使用的str()list()len()等这些都是内置函数,我们可以拿来直接使用。

标准库函数

        我们可以通过import语句导入库,然后使用其中定义的函数

第三方库函数

        Python社区也提供了很多高质量的库。下载安装这些库后,也是通过import语句导入,然后可以使用这些第三方库的函数

用户自定义函数

        用户自己定义的函数,显然也是开发中适应用户自身需求定义的函数。今天我们学习的就是如何自定义函数。

1.2.3、 函数的定义和调用

        实现某个功能的一段完整的代码code. 使用函数名称进行封装.以便 通过函数名调用,实现一次编写,多次调用的目的.

        python语言中:封装函数尽量做到: 高内聚 低耦合 (只完成自己的 功能, 函数执行成功与失败,与别的内容无关)

自定义函数语法:

        def 函数名(形式参数列表):

                code # 函数体

                return value 

def add(a,b,c):# 执行三个数相加,并返回和sum=a+b+cprint(f'{a} {b} {c}三个数相加的和为:{sum}')return sum
add(10,20,30)

 f68a23e8983d43368125a5c6a8d70e61.png

9c0ed2c59740466dbe009b5a23580369.png

我们使用def来定义函数,然后就是一个空格和函数名称;
        Python执行def时,会创建一个函数对象,并绑定到函数名变量上。
参数列表
        圆括号内是形式参数列表,有多个参数则使用逗号隔开
        定义时的形式参数不需要声明类型,也不需要指定函数返回值类型
        调用时的实际参数必须与形参列表一一对应
return返回值
        如果函数体中包含return语句,则结束函数执行并返回值;
        如果函数体中不包含return语句,则返回None值。
调用函数之前,必须要先定义函数,即先调用def创建函数对象
        内置函数对象会自动创建
        标准库和第三方库函数,通过import导入模块时,会执行模块中的def语句

二、形参和实参 

形参和实参的要点:

  • 圆括号内是形式参数列表,有多个参数则使用逗号隔开
  • 定义时的形式参数不需要声明类型,也不需要指定函数返回值类型
  • 调用时的实际参数必须与形参列表一一对应
def add(a, b):  # a 和 b 是形参  return a + b  result = add(5, 3)  # 5 和 3 是实参  
print(result)  # 输出结果是 8

2.1、形参

  • 定义:形参是函数定义时声明的变量,它们用来接收调用函数时传入的值。形参在函数内部使用,作用域是函数内部。

  • 特点:

    • 形参在函数定义时定义,通常是在函数头部括号内。

    • 形参可以被视为占位符,用于代表将来的实际输入数据。

2.2、实参 

  • 定义:实参是调用函数时传入的实际值或变量。实参可以是字面量、变量、表达式、以及其他函数的返回值等。

  • 特点:

    • 实参是在函数调用时提供的,实际传递给函数的值。

    • 实参的类型和数量需要和形参匹配。 

三、函数的参数传递

3.1、位置参数

位置参数是最基本的参数传递方式,函数调用时参数的传递顺序必须与函数定义时的参数顺序一致

# 定义一个函数
def function(name,  age,  sex):  # 需要传递三个参数print(f"姓名: {name}, 年龄:{age}, 性别: {sex}")# 调用这个函数
function("懒洋洋", 5, "Man")#姓名: 懒洋洋, 年龄:5, 性别: Man

3.2、关键字参数

关键字参数允许在调用函数时使用参数名来传递参数,这样可以不必考虑参数的顺序

# 定义一个函数 info: 做一个自我介绍
def info(name, age, score):print(f"my name is {name}, age: {age}, score: {score}")# 使用关键字去调用info 函数
info(age=18, score=100, name="小白")#my name is 小白, age: 18, score: 100
info("小白",score=90, age=6) # my name is 小白, age: 6, score: 90

3.3、缺省参数

缺省参数允许在定义函数时为某些参数提供默认值。如果在调用函数时没有提供这些参数的值,则使用默认值

# 定义一个函数 info: 做一个自我介绍
def info(name="某某某", age=18, score=100):print(f"my name is {name}, age: {age}, score: {score}")# 调用info函数
info() # info函数在调用的时候没有给出参数,则name,age, score使用的是默认值
info("小白") # 小白给出的是位置参数name的内容, age,score使用的是默认值
info(age=5, score=20) # age, score是关键字参数, name是没有给出值得.# name使用的是默认值参数info("小黑", age=10) # name是位置参数,age是关键字参数,score:默认值
info(age=18,"小白",score=20) # error :一旦使用了关键字参数,后面的内容就能再是# 位置参数了。

3.4、不定长参数

不定长参数允许在调用函数时传递任意数量的位置参数和关键字参数。这种参数在函数定义时使用 *args 和 **kwargs

3.4.1、*args

不定长位置参数使用 *args 接收多个位置参数,参数以元组的形式传递 

def info(name, age, *hobby):  # hobby参数前面有一个*表示的是不定长参数。print(f"name:{name}, age: {age}")print(f"hobby : {hobby}")# hobby这个参数是一个元组print(f"{type(hobby)}")# 调用函数info  # 小白 与 5 是位置参数,会给到name,age
# "足球", "篮球", "保龄球" 属于不定长参数,打包成元组,给到 hobby这个变量
info("小白", 5, "足球", "篮球", "保龄球")
# name:小白, age: 5
# hobby : ('足球', '篮球', '保龄球')
# <class 'tuple'>
print("*"*20)
info("小黑",10, "唱", "跳", "舞", "吃", "喝")
# name:小黑, age: 10
# hobby : ('唱', '跳', '舞', '吃', '喝')
# <class 'tuple'>

3.4.2、 **kwargs

不定长关键字参数使用 **kwargs 接收多个关键字参数,参数以字典的形式传递 

def info(name, age, **parent):  # parent:不定长参数: 前面有**,会将键值对的# 形式的参数打包成字典print(f"name: {name}, age: {age}")print(f"parent: {parent}")print(f"parent: {type(parent)}")# 调用info函数
info("小白", 5, mother="母亲", father="父亲")
# name: 小白, age: 5
# parent: {'mother': '母亲', 'father': '父亲'}
# parent: <class 'dict'>

3.4.3、组合

def info(name, age, *hobby, **parent):print(f"name:{name}, age: {age}, hobby: {hobby}, parent:{parent}")print(f'{type(hobby)}')print(f'{type(parent)}')# 调用info函数
info("小白", 5, "唱","跳", "篮球", mother="母亲", father="父亲")
'''
name:小白, age: 5, hobby: ('唱', '跳', '篮球'), parent:{'mother': '母亲', 'father': '父亲'}
<class 'tuple'>
<class 'dict'>
'''# error,在* 与 **混用的时候,一旦使用了**传递键值对儿的时候,就不能再传递单个的参数了。
# info("小黑", 5, "唱", mother="母亲", father="父亲", "跳", "篮球")

四、函数的返回值

return返回值要点:

        如果函数体中包含return语句,则结束函数执行并返回值

        如果函数体中不包含return语句,则返回None

        要返回多个值,使用列表、元组、字典、集合将多个值“存起来”即可

        返回多个值,会将返回值的值打包成 一个元组。

定义一个函数,返回100 ~ 999之间的所有的水仙花数字。 水仙数数字有 4个:

def flower():# 定义一个列表,记录水仙花数字ls = []# 编写功能,找到这四个水仙花数字for number in range(100, 1000):g = number % 10s = (number // 10) % 10b = number // 100# 判断是不是水仙花数字if number == g**3 + s**3 + b**3:ls.append(number)# 出了循环以后,ls里面的内容就是4个水仙花数字a, b, c, d = ls[0], ls[1], ls[2], ls[3]return a, b, c, d# 接收函数的返回值
value1, value2, value3, value4 = flower()
print(f"{value1}, {value2}, {value3}, {value4}")#153, 370, 371, 407result = flower()
print(f"result : {result}")#result : (153, 370, 371, 407)

五、全局变量和局部变量

5.1、全局变量

  1. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。

  2. 全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。

  3. global关键字作用: 声明使用的变量属于全局变量

  4. global一般在函数的内部使用。

a = 100     #全局变量
def f1():global a  #如果要在函数内改变全局变量的值,增加global关键字声明print(a)  #打印全局变量a的值  a = 300   f1()#100
f1()#300
print(a)#300

5.2、局部变量

  1. 在函数体中(包含形式参数)声明的变量。

  2. 局部变量的引用比全局变量快,优先考虑使用

  3. 如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量

a=100
def f1():a = 3   #同名的局部变量print(a)f1()#3
print(a)  #a仍然是100,没有变化

5.3、局部变量和全局变量效率测试 

        局部变量的查询和访问速度比全局变量快,优先考虑使用,尤其是在循环的时候。

        在特别强调效率的地方或者循环次数较多的地方,可以通过将全局变量转为局部变量提高运行速度。

import time
a = 1000
def test01():start = time.time()global afor i in range(100000000):a += 1end = time.time()print("耗时{0}".format((end-start)))
def test02():c = 1000start = time.time()for i in range(100000000):c += 1end = time.time()print("耗时{0}".format((end-start)))
test01()#耗时6.526300430297852
test02()#耗时5.019754648208618
print(globals())

5.4、nonlocal和global关键字 

nonlocal  用来在内部函数中,声明外层的局部变量。

global  函数内声明全局变量,然后才使用全局变量

#测试nonlocal、global关键字的用法
a = 100
def outer():b = 10def inner():nonlocal b     #声明外部函数的局部变量print("inner b:",b)#inner b: 10b = 20global a      #声明全局变量a = 1000inner()print("outer b:",b)#outer b: 20
outer()
print("a:",a)#a: 1000

六、lambda表达式和匿名函数

  lambda表达式可以用来声明匿名函数。lambda函数是一种简单的、在同一行中定义函数的方法。lambda函数实际生成了一个函数对象。

  lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。

lambda表达式的基本语法如下:

        lambda arg1,arg2,arg3...  : <表达式> 

arg1 arg2 arg3为函数的参数。<表达式>相当于函数体。运算结果是:表达式的运算结果。 

七、嵌套函数 

嵌套函数:在函数内部定义的函数!

def outer():print('outer')def inner():print('inner')inner()outer()

inner()就是定义在outer()函数内部的函数。inner()的定义和调用都在outer()函数内部 

应用场景:

  1. 封装 - 数据隐藏

    外部无法访问“嵌套函数”。

  2. 贯彻 DRY(Don’t Repeat Yourself) 原则

  3. 嵌套函数,可以让我们在函数内部避免重复代码。

  4. 闭包

八、递归函数

  1. 递归(recursion)是一种常见的算法思路,在很多算法中都会用到。比如:深度优先搜索(DFS:Depth First Search)等。

  2. 递归的基本思想就是“自己调用自己”

递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。每个递归函数必须包含两个部分:

  1. 终止条件

    表示递归什么时候结束。一般用于返回值,不再调用自己。

  2. 递归步骤

    把第n步的值和第n-1步相关联。

⚠️递归函数由于会创建大量的函数对象、过量的消耗内存和运算能力。在处理大量数据时,谨慎使用。 

使用递归函数计算一个数字的阶乘:

n=5
def jiec(n):if n==1:return 1return n*jiec(n-1)
print(jiec(5))#120

九、eval()函数 

功能:将字符串str当成有效的表达式来求值并返回计算结果。

语法:eval(expression, globals=None, locals=None) 

参数:

  1. source:一个Python表达式或函数compile()返回的代码对象

  2. globals:可选。必须是dictionary

  3. locals:可选。任意映射对象

result = eval("2 + 3")  
print(result)  # 输出: 5x = 10  
result = eval("x * 2")  
print(result)  # 输出: 20result = eval("max(5, 10, 15) + min(1, 2, 3)")  
print(result)  # 输出: 16x = 1  
def my_func():  y = 2  # 使用eval执行局部变量  return eval("x + y", globals(), locals())  print(my_func())  # 输出: 3

⚠️⚠️⚠️eval函数会将字符串当做语句来执行,因此会被注入安全隐患。比如:字符串中含有删除文件的语句。那就麻烦大了。因此,使用时候,要慎重!!! 

  • 安全性:使用 eval() 可能存在安全风险,因为它会执行字符串中的任何 Python 代码。如果字符串来自不可信的来源(如用户输入),这可能导致代码注入风险。因此,在处理不安全的输入时,尽量避免使用 eval()

  • 性能eval() 的执行效率相对较低,因为它会运行解析和执行,极有可能在性能敏感的场合造成瓶颈。

  • 替代方案:对于简单的数学表达式,可以使用 ast.literal_eval(),它安全地求值字面量表达式,如字典、列表、元组等,不会执行其他代码。

import ast  str_expr = "[1, 2, 3, 4]"  
result = ast.literal_eval(str_expr)  # 安全地转换字符串为列表  
print(result)  # 输出: [1, 2, 3, 4]

十、LEGB规则

Local 指的就是函数或者类的方法内部

Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)

Global 指的是模块中的全局变量

Built in 指的是Python为自己保留的特殊名称

如果某个name映射在局部local命名空间中没有找到,接下来就会在闭包作用域enclosed进行搜索,如果闭包作用域也没有找到,Python就会到全局global命名空间中进行查找,最后会在内建built-in命名空间搜索 (如果一个名称在所有命名空间中都没有找到,就会产生一个NameError) 

#测试LEGB
s = "global"
def outer():s = "outer"def inner():s = "inner"print(s)inner()
outer()#inner

十一、学生管理系统(基于函数) 

# 完成学生管理系统# 1.创建一个班级信息: 班级使用列表这个容器进行表示
class_info = []# 2. 定义一个python菜单函数
def print_menu():print("****************************")print("** 1. 增加学生   2. 删除学生 **")print("** 3. 修改学生   4. 查询学生 **")print("** 5. 显示所有学生信息       **")print("** 6. 退出学生管理系统       **")print("****************************")# 定义一个增加学生信息的函数
def add_student():"""student 使用字典数据类型进行描述;{"name": name,"age" : age,"score" : score}"""# 声明使用的是全局变量global class_info# 从键盘中输入学生的信息name = input("please input student name : >> ")age = int(input("please input student age : >> "))score = int(input("please input student score : >>"))# 需要对学生的信息进行验证# 对名字进行重名认证,如果重复名字了,就不让在添加信息# class_info = [{"name":name, "age":age, "score":score}, {},{}]# 使用for循环进行遍历for info in class_info:# 如果class_info里面有数据,则info是学生的个人信息if info["name"] == name:print("您输入的学生已经存在,添加学生失败")return -1# 对年龄判断if 0 > age > 100:print("您输入的年龄有误,添加学生失败")return -2# 对成绩的判断if 0 > score > 100:print("您输入的成绩有误,添加学生失败")return -3# 通过输入的信息组建成一个字典student = {"name": name, "age": age, "score": score}# 将学生信息加入到列表当中class_info.append(student)print(f"添加学生{name}信息成功")return 0# 删除学生
def remove_student():""" 删除学生信息 """# 1.global声明全局变量 class_infoglobal class_info# 2.根据学生姓名删除学生信息name = input("please input remove student name : >>")# 3.根据学生的姓名找到需要删除的学生for student in class_info:if student["name"] == name:# 通过姓名找到了需要删除的学生""" python 语言中列表可以根据值删除 remove """ret = input(f"您确定要删除{name}的信息吗?如果确认请输入yes or y")if ret == "yes" or ret == "y":class_info.remove(student)print("删除成功")return 0else:print("您的输入有误")return -1# for 循环结束, 代表了没有找到需要删除的学生print("您输入的学生不存在")return -2# 修改学生信息函数
def modify_student():""" 修改学生信息 """# 声明使用全局变量global class_info# 通过学生的学号对学生的信息进行修改: 列表将其下标当做学号number = int(input("please input student number >>"))# 判断学号是否正确if len(class_info) <= number < 0:print("您输入的学号有误")return -1# 根据学号修改相应的信息class_info[number]["name"] = input("请输入修改之后的学生姓名: ")class_info[number]["age"] = int(input("请输入修改之后的学生年龄 :"))class_info[number]["score"] = int(input("请输入修改之后的学生成绩 :"))print("修改学生成功")return 0# 定义一个查找学生的函数
def find_student():# 声明使用的变量是全局变量global class_info# 通过姓名查找学生的信息name = input("please input student name : >>")for info in class_info:if info["name"] == name:print(f"姓名: {info['name']}, age: {info['age']}, score:{info['score']}")return 0print("您输入的学生不存在")return -1# 显示所有的学生信息
def show_student():# 声明使用的是全局变量global class_infofor info in class_info:print(f"姓名: {info['name']}, age: {info['age']}, score:{info['score']}")def main():""" 学生管理系统主程序 """# 死循环管理学生系统while True:# 打印学生管理系统菜单print_menu()# 给出提示信息,让用户选择自己的操作choose = int(input("please input your choose"))match choose:case 1:add_student()case 2:remove_student()case 3:modify_student()case 4:find_student()case 5:show_student()case 6:print("bye~")breakcase _:print("您的输入有误,请重新输入")pass# 调用main函数执行程序
main()

十二、思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1600.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧拉路径算法

欧拉图&#xff1a; 对于应该连通图G&#xff0c;有&#xff1a; 1欧拉路径&#xff1a;一条路径&#xff0c;它能够不重复地遍历完所有的边&#xff0c;这个性质很像不重复地一笔画完所有边&#xff0c;所以有些涉及到欧拉路径的问题叫做一笔画问题。 2欧拉回路&#xff1a…

后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权

目录 后端注册拦截器 实现对 WebMvcConfigurer 接口的类实现 静态变量 方法重写 注册 Spring Framework拦截器 Sa-Token中SaServletFilter拦截器 思考 为什么使用两个拦截器 1. Spring Framework 拦截器 2. SaServletFilter 为什么要注册两个拦截器&#xff1f; 总结 …

Angular-生命周期及钩子函数

什么是生命周期 Angular 创建和渲染组件及其子组件&#xff0c;当它们绑定的属性发生变化时检查它们&#xff0c;并在从 DOM 中移除它之前销毁它们。生命周期函数通俗的讲就是组件创建、组件更新、组件销毁的时候会触发的一系列的方法。当 Angular 使用构造函数新建一个组件或…

Microsoft

Microsoft Word目录1.目录编号与文字的间距设置2. 目录编号缩进设置 Excel函数MID&#xff08;提取字符&#xff09;CONCAT&#xff08;组合字符串&#xff09;EXACT&#xff08;比较字符串&#xff09; PowerPointwindows 11 恢复右键传统菜单 Word 目录 1.目录编号与文字的…

MAC AndroidStudio模拟器无网络

先确认PC端是正常访问网络的&#xff1b; 模拟器端修改Wifi设置&#xff1a;设置 - 网络和互联网 - WALN设置 按照上图修改&#xff1b; IP设置&#xff1a;从DHCP修改为静态&#xff0c;IP地址&#xff1a;10.0.2.16 &#xff0c;网关&#xff1a;10.0.2.2 &#xff0c; DNS…

Android 对接口的封装使用

前言 本篇文章主要是记录Android代码 对java 接口的封装和使用方法&#xff0c;比较基础&#xff0c;记录一下&#xff0c;阅读本篇文章前&#xff0c;请移步 java基础系列(九) 接口和抽象类 这篇文章。 接口理解 从设计角度: 设计方面的区别 抽象类是对一种事物的抽象&#…

Qiskit快速编程探索(进阶篇)

五、量子电路模拟:探索量子世界的虚拟实验室 5.1 Aer模拟器:强大的模拟引擎 在量子计算的探索旅程中,Aer模拟器作为Qiskit的核心组件之一,宛如一座功能强大的虚拟实验室,为开发者提供了在经典计算机上模拟量子电路运行的卓越能力。它打破了硬件条件的限制,使得研究者无…

如何独立SDK模块到源码目录?

如何独立SDK模块到源码目录&#xff1f; 常见三种构建方式&#xff0c;具体取决于SDK开源程序库的方式&#xff1a; 类UNIX系统平台项目管理工具的进化路径&#xff1a;简单的Makefile>Configure(Autoconf/Automake)>CMake openWrt示例&#xff0c;如下&#xff1a; …

极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案

作者&#xff1a;卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏&#xff0c;我们邀请来自微软以及技术社区专家&#xff0c;带来最前沿的技术干货与实践经验。在这里&#xff0c;您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…

MMDetection框架下的常见目标检测与分割模型综述与实践指南

目录 综述与实践指南 SSD (Single Shot MultiBox Detector) 基本配置和使用代码 RetinaNet 基本配置和使用代码 Faster R-CNN 基本配置和使用代码 Mask R-CNN 基本配置和使用代码 Cascade R-CNN 基本配置和使用代码 总结 综述与实践指南 MMDetection是一个基于Py…

服务器数据恢复—EMC存储POOL中数据卷被删除的数据恢复案例

服务器数据恢复环境&故障&#xff1a; EMC Unity 400存储连接了2台硬盘柜。2台硬盘柜上一共有21块硬盘&#xff08;520字节&#xff09;。21块盘组建了2组RAID6&#xff1a;一组有11块硬盘&#xff0c;一组有10块硬盘。 在存储运行过程中&#xff0c;管理员误操作删除了 2组…

Leetcode 377. 组合总和 Ⅳ 动态规划

原题链接&#xff1a;Leetcode 377. 组合总和 Ⅳ 可参考官解 class Solution { public:int combinationSum4(vector<int>& nums, int target) {vector<int> dp(target 1);dp[0] 1;// 总和为 i 的元素组合的个数for (int i 1; i < target; i) {// 每次都…

Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速

本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示&#xff0c;你自己编译或者其他源的版本可能会不同。 ffmpeg 的一些介绍&#xff0c;以及 macOS 版本的 ffmpeg 硬件加速请见《macOS上如何安装&#xff08;不需要编译安装…

【端云一体化】云函数的使用

前言 为丰富HarmonyOS对云端开发的支持、实现端云联动&#xff0c;DevEco Studio以Cloud Foundation Kit&#xff08;云开发服务&#xff09;为底座、在传统的“端开发”基础上新增“云开发”能力&#xff0c;开发者在创建工程时选择合适的云开发工程模板&#xff0c;即可在De…

vLLM私有化部署大语言模型LLM

目录 一、vLLM介绍 二、安装vLLM 1、安装环境 2、安装步骤 三、运行vLLM 1、运行方式 2、切换模型下载源 3、运行本地已下载模型 四、通过http访问vLLM 一、vLLM介绍 vLLM&#xff08;官方网址&#xff1a;https://www.vllm.ai&#xff09;是一种用于大规模语言模型&#x…

【Linux 之一 】Linux常用命令汇总

Linux常用命令 ./catcd 命令chmodclearcphistoryhtoplnmkdirmvpwdrmtailunamewcwhoami 我从2021年4月份开始才开始真正意义上接触Linux&#xff0c;最初学习时是一脸蒙圈&#xff0c;啥也不会&#xff0c;啥也不懂&#xff0c;做了很多乱七八糟&#xff0c;没有条理的笔记。不知…

蓝牙BT04-A的使用与相关AT指令

一、AT指令没有返回的问题及解决方案 检查指令格式&#xff1a; 确认指令格式是否正确&#xff0c;包括特定的命令和结尾的回车换行符&#xff08;n&#xff09;。 检查TX/RX连接&#xff1a; 确认TX&#xff08;发送&#xff09;和RX&#xff08;接收&#xff09;线是否连接正…

国产Docker可视化面板Dpanel的安装与功能解析

国产Docker可视化面板Dpanel的安装及功能介绍 Docker 可视化面板系统&#xff0c;提供完善的 docker 管理功能。 支持查看基本信息、运行状态统计、网络统计、磁盘统计、用量统计等功能 ​​ ​​ 容器管理&#xff1a; ​​ 创建/修改容器 ​​ 支持基本配置、环境变量、…

金融项目实战 06|Python实现接口自动化——日志、认证开户接口

一、日志封装及应用&#xff08;理解&#xff09; &#x1f534;日志的作用&#xff1a; 记录程序运行的步骤和错误。 &#x1f534;日志的场景&#xff1a; 1、调试bug2、查看程序运行轨迹 &#x1f534;日志基本应用&#xff1a; # 1、导包 import logging # 2、调用日…

第423场周赛:检测相邻递增子数组 Ⅰ、检测相邻递增子数组 Ⅱ、好子序列的元素之和、统计小于 N 的 K 可约简整数

Q1、检测相邻递增子数组 Ⅰ 1、题目描述 给你一个由 n 个整数组成的数组 nums 和一个整数 k&#xff0c;请你确定是否存在 两个 相邻 且长度为 k 的 严格递增 子数组。具体来说&#xff0c;需要检查是否存在从下标 a 和 b (a < b) 开始的 两个 子数组&#xff0c;并满足下…