「Python编程基础」第3章:控制流

news2024/11/15 18:41:22

在这里插入图片描述

文章目录

  • 一、用“炒菜”简单介绍下“控制流”
  • 二、布尔值
  • 三、比较运算符
  • 四、== 和 = 操作符的区别
  • 五、布尔操作符
  • 六、混合布尔和比较操作符
  • 七、代码块是什么?
  • 八、控制流语句
    • 1. if 语句
    • 2. else语句
    • 3. elif语句
    • 4. 总结
  • 九、while循环语句
  • 十、break语句
  • 十一、continue语句
  • 十二、for循环与range()函数
  • 十三、细说range()函数
  • 十四、模块导入
  • 十五、控制流的压轴戏“sys.exit()”函数,提前结束程序。
  • 十六、练习题
    • 第一题:猜数字
    • 第二题:小孩子们的“石头、剪刀、布”。

一、用“炒菜”简单介绍下“控制流”

事实上,之前学习的代码,都是一行一行执行,但是我们希望可以通过一些代码,让代码按照我们的想法,去执行。

比如:

我们希望可以跳过代码;

重复执行某一段代码;

根据我们的预期结果和实际接轨,执行某一段代码;

就像下面这个简单的“炒菜”一样,告诉你炒菜都需要做些什么事?

在这里插入图片描述

二、布尔值

前面已经学习过“整型、浮点型、字符串”,他们可以输入无数种值,但布尔值只有两种值

炒菜例子中,我们有两种判断 “有、没有”,代码中布尔值则用 “True、False”表示,意思为“是、不是”

a = True
print(a)

b = False
print(b)

代码中,我们将True和False保存在变量a、b中。

在这里插入图片描述

提一个问题,变量名能否用True或Flase命名,初学的朋友可以敲下代码试试?
在这里插入图片描述
在这里插入图片描述
在Python里,我们对类似“True”这样的词语有一个称呼叫做 「关键字」,关键字是不能用来变量命名的。

以下都属于Python的关键字:

and、as、assert、break、class、continue、def、del、elif、else、except、False、finally、for、from、global、if、import、in、is、lambda、None、nonlocal、not、or、pass、raise、return、True、try、while、with、yield

三、比较运算符

比较运算符(关系操作符),顾名思义,就是比较两个值的真假关系。

操作符含义
==等于
!=不等于
<小于
>大于
<=小于等于
>=大于等于
print(1 == 1)
print("测试划水老师傅" == "测试划水老师傅")

print(1 != 1)
print("测试划水老师傅" != "测试划水老师傅")

print(1 < 2)
print(1 > 2)

print(1 <= 1)
print(1 >= 1)

我们会发现,比较运算符可以应用于 字符串、数字、以及后面我们会学到的列表、字典等所有数据类型,如果两边的值符合比较符号逻辑判断,则值显示为True,反之为False。

在这里插入图片描述

这里提一个问题,下面这个代码输出是True还是False?请告诉我原因是什么?

print(1 == '1')

原因由于两者的数据类型不一致,在Python的语法中,认为“整数1”与“字符串1”不同。

四、== 和 = 操作符的区别

估计细心的同学已经注意到“=”、“==”这两个符号,那么他们有什么区别?不知道在学习过程中你们有没试错?

比如编写代码“print(1 = 1)”,看看代码会不会报错。

  1. = 是“赋值符号”,用于将右边的“值”赋值给左边的“变量”。
  2. == 是“等于”符号,用于比较确定两个值是否相同。

五、布尔操作符

就在刚刚,我们已经学习了“布尔值”和“比较操作符”,那么还有那些“布尔操作符”?

这里介绍剩下的3个操作符,他们的写法与操作符不一样,是以英文字母表示。

操作符含义
and
or
not

我们写写代码,看看Python运行结果。

# and 操作符
print(True and True)
print(True and False)
print(False and True)
print(False and False)

在这里插入图片描述

# or 操作符
print(True or True)
print(True or False)
print(False or True)
print(False or False)

在这里插入图片描述

# not 操作符
print(not True)
print(not False)

在这里插入图片描述

思考5分钟,你有没有发现一些写法上、结果上的规律呢?试着别看文档,自己想想答案,毕竟作为测试,观察和思考很重要!

写法上:

  1. and 和 or 都需要接收2个布尔值(或表达式),并将结果求值为一个布尔值。
  2. not 只接收1个布尔值(或表达式),并将结果求值为一个布尔值。

结果上:

  1. and 接收的2个布尔值(或表达式),必须都为真,结果才为真,如果有一个是假,则结果是假。
  2. or 简单来说就是只要有一个为真,结果就为真。
  3. not 则将一个求值结果为相反的布尔值。

六、混合布尔和比较操作符

写代码中,当然不可能仅仅用到一种操作符,大概率是要混合使用,所以是时候跟着我的代码练习下混合写法。

(代码没有标准性,只要结果正确就行,所以建议写完后,可以按照自己的理解,写写不一样代码,与自己脑子记预想的结果是否一致)

a = (1 < 2) and (3 < 4)
print(a)

b = (1 == 1) or (2 == 1)
print(b)

c = 1 + 1 == 2 and not 1 + 1 == 5 and 2 * 2 == 2 + 2
print(c)

在这里插入图片描述

你会发现,最后一行代码略显复杂,因为我还没告诉你算数操作符和布尔操作符的优先级,布尔操作符,在所有算数符和比较操作符之后,进行操作,如果你觉得难以立即,试试加上括号()。

c = (1 + 1 == 2) and not (1 + 1 == 5) and (2 * 2 == 2 + 2)
print(c)

七、代码块是什么?

控制流语句开始的部分通常都是“条件”,接下来是一个“代码块”,根据条件的布尔值,也就是“真\假”来执行代码块。

什么是代码块?

Python中,代码块的定义其实是根据**“缩进”**来完成的,这些放在一组的代码语句组成的“块”就是代码块。

# 代码块演示
login_user = "测试划水老师傅" 
login_password = "pwd123456" 
if login_user == "测试划水老师傅" and login_password == "pwd123456":
    print("登录成功") # 第1个代码块
else:
    print("登录账号或密码错误!") # 第2个代码块

代码块有以下特点:

  1. 增加缩进时,表示代码块的开始。
  2. 代码块可以包含其他代码块。
  3. 缩进减少为0时,或者与外面包围的代码块对齐时,该代码块结束。

在Python中,缩进很重要,大多数新手的代码运行结果与预期不符,发生在缩进错误。

八、控制流语句

代码块的演示,我们用到了两个控制流语句,接下来,我们就重点讲一下控制流语句的内容。

1. if 语句

if语句在任何编程语言中,都是最常见的控制语句,而执行的条件在为True时,执行if语句下的代码块。

如果用通俗的自然语言(日常用语)来描述:“如果条件为真,执行代码。”

if语句在Python中有以下几点特征:

  1. 关键字“if”。
  2. 条件(即求值为True或False的表达式)。
  3. 冒号。
  4. 在下一行开始,要缩进的代码块(行业术语称呼其为“子句”)。
name = "测试划水老师傅"
if name == "测试划水老师傅":
    print("Hi 老师傅!")

在这里插入图片描述

2. else语句

根据实际需要,if后面也可以跟着else语句。当if语句的条件为False时,就会执行else下的子句。

如果用通俗的自然语言(日常用语)来描述:“如果条件为真,执行if的代码,否则执行else的代码。”

else语句在Python中有以下几点特征:

  1. 关键字“else”。
  2. 冒号。
  3. 在下一行开始,要缩进的代码块(行业术语称呼其为“子句”)。

我们回到if的例子,继续增加else语句,输出不同的结果。

name = "老师傅"
if name == "测试划水老师傅":
    print("Hi 老师傅!")
else:
    print("呔,你是假的测试划水老师傅!")

在这里插入图片描述

3. elif语句

虽然已经有了 if 和 else,但是想想现实生活中的需求,这远远不够,比如:如果你知道了老师傅的名字和自媒体ID,怎么向老师傅打招呼呢?

(特征不再赘述)

name = "老师傅"
dy_id = "1234567"
if name == "测试划水老师傅":
    print("Hi 测试划水老师傅!")
elif dy_id == "1234567":
    print("Hi 测试划水老师傅!")
else:
    print("呔,你是假的测试划水老师傅!")

在这里插入图片描述

学完3个控制流语句,有没有发现一个很细微的特点?(思考5分钟)

如果没有发现,试试这个练习题,尝试自己写一遍并运行,如果你发现了Bug(问题),但是不会解决,可以发在老师傅的知识星球上。

name = "老师傅"
age = 30
if name == "测试划水老师傅":
    print("Hi,测试划水老师傅")
elif age == 18:
    print("Hi,测试划水老师傅")

4. 总结

if、elif、else这类控制流结构为:“如果第1个条件为真,则执行第1个事;如果第2个条件为真,则执行第2件事;否则,做另外的事。”

要记得规避练习题中的BUG,仅有一个if,elif永远跟在if之后,其次,如果希望确保至少一条子句被执行,一定要加上else语句。

九、while循环语句

什么是while循环语句,就是可以让一个代码块根据自己需求,一遍又一遍执行。比如生活中,我们吃饭时,要一口一口吃,直到吃完,就会用到循环语句。

while语句在Python中有以下几点特征:

  1. 关键字“while”。
  2. 条件(即求值为True或False的表达式)。
  3. 冒号。
  4. 在下一行开始,要缩进的代码块(行业术语称呼其为“子句”)。

通过特征来看,我们while和if比较相似,不同的是他们的行为。if子句结束时,程序会继续执行if之后的语句,而while在子句结束时,程序会跳回到while循环语句开始处继续执行,直到条件为“假”时结束。

我们用一个相同条件的代码来看看if和while的区别。

num = 0
if num < 5:
    print(f"Hi {num}")
    num = num + 1

num = 0
while num < 5:
    print(f"Hi {num}")
    num = num + 1

在这里插入图片描述

在这里插入图片描述

试试这2个练习题,尝试自己写一遍并运行,如果你发现了Bug(问题),但是不会解决,可以发在老师傅的知识星球上。

name = ""
while name != "":
    name = input("请输入你的名字:")
    print(f"您好,{name},欢迎使用该程序!")
print("谢谢使用该程序!")
name = ""
while name != "请输入你的名字":
    name = input("请输入你的名字:")
    print(f"您好,{name},欢迎使用该程序!")
print("谢谢使用该程序!")

十、break语句

break语句,可以强制跳出循环执行语句。在代码中,break语句仅包含break关键字。

试试在刚才的代码里加上break,运行一下,你会发现不一样的结果。

name = ""
while name != "请输入你的名字":
    name = input("请输入你的名字:")
    print(f"您好,{name},欢迎使用该程序!")
    break
print("谢谢使用该程序!")

在这里插入图片描述

十一、continue语句

与break类似,continue语句用于循环内部,当循环语句中的代码执行到continue时,会马上跳回到循环开始处,重新对循环条件求值。

让我们尝试编写并运行下面的代码,试试效果。

user = "Kevin"
pwd = "123456"
while True:
    input_user = input("请输入登录名:")
    if input_user != user:
        print(f"{input_user} 用户不存在!")
        continue
    input_pwd = input("请输入你的登录密码:")
    if input_pwd != pwd:
        print("密码错误,退出程序!")
        break
    print("欢迎使用!")
    break

当用户输入“input_user” 与user = "Kevin"不相等时,会提示用户不存在,跳回到循环开始处,再次对条件求值。

当用户输入“input_user” 与user = "Kevin"相等时,会提示用户输入密码,不在跳回到循环开始处。

请尝试根据代码自己画出流程图,理解代码的运行原理。

在这里插入图片描述

十二、for循环与range()函数

当条件为真时,while循环会一直运行,但是日常生活中,有些循环一直为真,但是我们需要执行一定次数后就停止运行,比如:约会时,男生通常都会等女生,假设我们等她到1个小时的时候,就不再等下去,该如何实现?

可以通过 for i in range(60): 来实现(这里的60表示60分钟)。

for i in range()语句在Python中有以下几点特征:

  1. 关键字“for”。
  2. 一个变量名。
  3. 关键字“in”。
  4. 调用range()函数,最多传入3个参数。
  5. 冒号
  6. 从下一行开始,缩进的代码块(称之为for子句)。

我们实现这个缺根弦的代码,运行看看结果。

for i in range(60):
    i = i + 1
    re_time = 60 - i
    print(f"我已经等了女朋友{i}分钟,距离我开溜还剩{re_time}分钟!")
print("这是一个缺根弦的代码,大家千万别学!")

在这里插入图片描述

第一次运行时,变量i被设置为0,当然你也可以直接从第60分钟开始(呵呵,男人),当i被判断小于60的时候,会被执行之后的子句。

为什么子句中i要先执行+1操作,那是因为现实里有“等了0分钟”这一说法吗?哈哈,写代码要与现实一致哦。

你可以试试删除一些代码,看看会发生什么变化,比如删掉“i = i + 1”,你会发现有趣的结果!

(有2处,如果你实在照不出来,可以在星球上向老师傅提问)。

在这里插入图片描述

事实上,用while也能实现,但是我不建议这样做,因为我认为Python禁止“简单的事情复杂做”。

十三、细说range()函数

这也许是你接触的第一个多参数函数,range()函数内,可以传入的参数包含“开始、结束、步长”参数,实现各种正数序列。看不懂没关系,我们使用代码来演示一下。

比如最简单的,我们通过这个函数打印1-100的数字。

for i in range(1,101):
    print(i)

在这里插入图片描述

第一次使用range函数,通过这个小练习,我们发现一些小特征:

  1. 通过这个函数,能够快速打印1-100,再也不用傻傻的“写100个print”了。
  2. 你会发现range的“开始”和“结束”,属于前包后不包,还记得小时候学的数学的开闭区间吗?和[1,100)道理一样。

接下来,我们再研究下步长的概念,估计很多人都遇到过一道特别简单的面试题“打印1-100的偶数”,很多培训的同学,遇到这个问题都比较慌,甚至忘了range这个函数,我们使用这个函数来打印1-100的偶数试试。

for i in range(2, 101, 2):
    print(i)

当然还有一种写法,可以不需要用到步长,你想到了吗?

for i in range(1, 101):
    if i % 2 == 0:
        print(i)

思考一下!

还有其他写法吗?

为什么第1段代码为什么起点是从“2”开始?(自己动手改改起点的代码试试结果?)

为什么第2段代码不需要写步长“2”?(自动动手加上步长,又会有什么结果?)

三个参数,都试试“负数”,结果又有什么不一样?

十四、模块导入

Python程序可以调用一组基本的函数,向我们见过的“print()、input()函数都属于函数”,专业属于称这些函数为“内置函数”,而他们所属的模块,称作“标准库”。当然啦,既然有“标准库”,按照剧情发展必然有“非标准库”(暂时不讲)。

那怎么区分“标准库”?“非标准库”?

还记得安装Python吗?安装完之后,你可以去查看这个目录。

(这并不是重点,就理解成手机预装软件即可)

在这里插入图片描述

我们聊聊重点。

在使用模块时,一定要使用语句import导入该模块。

import语句在Python中有以下几点特征:

  1. 关键字“import”。
  2. 模块的名称。
  3. 可选的更多模块名称,模块名称之间用英文逗号隔开。
  4. 再导入模块后,就可以在代码中直接使用该模块内的所有函数。

话不多说,直接练代码。让我们试试random模块。

import random

for i in range(5):
    print(random.randint(1, 10))

导入random模块后,我们可以直接使用这个模块内的函数,比如randint,可以生成这个区间内的“随机正数”。

在这里插入图片描述

我们不妨按住键盘“Ctrl + 鼠标左键”,查看这个模块的详细内容。

当然现阶段,你并不需要了解模块的写法,只需要了解有这么个玩意就行,放到百度翻译下这个模块的介绍,了解它是关于“随机数”的模块即可。

当然我一般也不看,甚至在我不知道有这么个随机数模块时,我需要用什么,都是百度搜索“Python 随机数(整型、浮点型)生成”的关键字,百度会告诉我用什么模块。

在这里插入图片描述

在这里插入图片描述

十五、控制流的压轴戏“sys.exit()”函数,提前结束程序。

认真看教程的同学,看到标题,应该就知道sys.exit()函数其实引入的模块是sys,顾名思义其实是面向Python解释器的一个系统级别的交互模块。

这个模块很重要,虽然还是那句话,可以百度,但是建议在百度过程中,记住几个常用函数,不然每次都百度,估计也该下岗了。

我们写一段代码,了解下如何提前结束程序。

import sys

while True:
    res = input("输入「掀桌子」,程序退出:")
    if res == "掀桌子":
        sys.exit()
    print("如果程序没有退出,会执行这个语句。")

我们之前学过break,可以跳出循环,但是如果没有,这个程序会无线循环,所以使用sys.exit()效果类似break。

在这里插入图片描述

十六、练习题

第一题:猜数字

《猜数字》游戏介绍
亲爱的玩家,你好!
欢迎来到《猜数字》游戏!
我们悄悄的藏起了一个“数字”,这个数字介于1~20之间。
请注意!!!
你共有6次机会进行尝试!
如果猜错,你将永远被困在这个冒险岛!
加油吧,冒险者!
(猜中或猜错都会有提示)

第二题:小孩子们的“石头、剪刀、布”。

《石头剪子布》游戏介绍
亲爱的玩家,你好!
欢迎来到《石头剪子布》游戏!
猜数字这个游戏,想必你已经很熟悉,我就不做过多介绍。
但有一点你需要谨记:我们会有一个计分板,当你赢得次数大于守卫者,你将逃出冒险岛!
输入规则:r(石头),s(剪刀),(布)c,q(退出)
(你可以选择“退出游戏”,但那也代表你将永远留在岛上)

当你完成后,尝试自己改进下代码,比如可以把两个游戏组成一个系列,根据用户选择,玩不同的游戏。

当然如果你有更好的想法和代码实现,可以来老师傅的星球交流。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

竞赛选题 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习行人重识别(person reid)系统 该项目…

Windows通过ssh连接远程服务器并进入docker容器

Windows操作系统可以使用vscode通过ssh远程连接ubuntu服务器&#xff1a; 首先下载安装vscode&#xff0c;然后安装插件Remote-SSH&#xff1a; 通过ctlshiftP可以打开Remote-SSH&#xff1a;connect to host&#xff1b; 输入ssh Userhostname -p port host和hostname对应的是…

力扣 2. 两数相加

Problem: 2. 两数相加 思路与算法 Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this…

numpy报错:AttributeError: module ‘numpy‘ has no attribute ‘float‘

报错&#xff1a;AttributeError: module numpy has no attribute float numpy官网&#xff1a;NumPy 报错原因&#xff1a;从numpy1.24起删除了numpy.bool、numpy.int、numpy.float、numpy.complex、numpy.object、numpy.str、numpy.long、numpy.unicode类型的支持。 解决办法…

HarmonyOS开发:ArkTs常见数据类型(一)

前言 无论是Android还是iOS开发&#xff0c;都提供了多种数据类型用于常见的业务开发&#xff0c;但在ArkTs中&#xff0c;数据类型就大有不同&#xff0c;比如int&#xff0c;float&#xff0c;double&#xff0c;long统一就是number类型&#xff0c;当然了也不存在char类型&a…

系列九、JUC强大的辅助类

一、CountDownLatch 1.1、概述 让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒 1.2、功能 CountDownLatch主要有两个方法&#xff0c;当一个或多个线程调用await方法时&#xff0c;这些线程会阻塞&#xff0c;其它线程调用countDown方法会将计数器减1(调用countDown方…

企业实现员工聊天和转账行为的实时监管

如何解决企业营销团队的管理问题&#xff1f; 在当今竞争激烈的市场环境中&#xff0c;企业营销团队的管理显得尤为重要。营销团队是企业发展的重要支柱&#xff0c;然而&#xff0c;一些常见的问题如员工飞单、私单、辱骂删除客户、离职带走公司客户以及工作不认真、工作量无…

Java笔记-PrintWriter无文件或文件内容为空

代码是这样的&#xff1a; PrintWriter out new PrintWriter(fileName); out.println(object.getValue()); out.close(); 查了下这个类&#xff0c;出现问题不会报异常。 但可以用checkError()函数返回值&#xff0c;判断是否有错误。 如果发现无文件或者文件内容为空&#…

C# Onnx DIS高精度图像二类分割

目录 介绍 效果 模型信息 项目 代码 下载 介绍 github地址&#xff1a;https://github.com/xuebinqin/DIS This is the repo for our new project Highly Accurate Dichotomous Image Segmentation 对应的paper是ECCV2022的一篇文章《Highly Accurate Dichotomous Imag…

猫罐头品牌排行榜盘点!猫罐头哪个牌子好?

很多猫主人会发现他们家的猫咪可能对猫粮感到腻了&#xff0c;或者猫咪平时不爱喝水&#xff0c;还有一些主人可能会注意到猫咪太瘦了&#xff0c;想尝试给它们添加一些猫罐头&#xff0c;但又不确定如何选择。目前市场上的猫罐头品牌众多&#xff0c;确实让人有些困惑。那么&a…

Cesium 问题:输出的 纬度 latitude 是 0

文章目录 问题分析问题 在坐标转换的时候,出现如下问题 分析 在检查代码后,发现我将转换之前的高度默认设置为了 0 ,因此没能正确转换 let positionsOnCircle = [];// 圆面边缘的点 let numPoints = 360; for (let i

OpenAI | 解雇奥特曼后 ChatGPT将何去何从

大家好,我是极智视界,欢迎关注我的公众号,获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 11 月 17 日,OpenAI 董事会突然宣布解雇联合创始人兼首席执行官 Sam Altman,原因是…

【计算机组成体系结构】存储系统基本概念

一、存储器的层次化结构 CPU无法直接与辅存传输数据&#xff0c;因为CPU的处理速度大于辅存的读写速度&#xff0c;如果直接交互会拖累CPU的速度。所以需要先把辅存中的数据写入主存再与CPU进行数据传输。 Cache&#xff0c;高速缓存在主存和CPU之间。存在Cache的原因是主存的…

静态文件鉴权

​ 静态文件鉴权的解决方案 背景介绍 XX业务系统作为BXX业务系统的孪生姐妹系统&#xff0c;是对BXX受理业务的强力补充系统&#xff0c;他允许操作员拿着IPAD&#xff0c;和客户约定地点上门受理业务。 因一些业务的受理&#xff0c;按照最新的业务规章制度&#xff0c;需…

React中封装echarts图表组件以及自适应窗口变化

文章目录 前言环境代码接口使用效果后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react.js &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;…

二手车选购参考:Honda CB650R/CBR650R 2019~2023 国产价格享进口本田

本田好&#xff0c;本田妙&#xff0c;本田大法呱呱叫。本田的650系列在国内可以说是伤透了一批老车主的心&#xff0c;上路12万&#xff0c;3年现在还值个4万&#xff0c;搁谁也受不了&#xff0c;正好没什么太好的新闻写&#xff0c;今天就带大家来看看二手车选购参考&#x…

常见树种(贵州省):004杨树种类

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、响叶杨…

Linux内核调试篇——获取内核函数地址的四种方法(一文解决)

在内核调试中&#xff0c;经常需要知道某个函数的地址&#xff0c;或者根据函数地址找到对应的函数&#xff0c;从而进行更深一步的debug。 下面介绍四种获取内核函数地址的方法&#xff1a; 1、System.map 在编译Linux内核时&#xff0c;会产生一个内核映像文件System.map&…

全志R128内存泄漏调试案例

内存泄露调试案例 问题背景 硬件&#xff1a;R128 软件&#xff1a;FreeRTOS rtplayer_test(Cedarx) AudioSystem 问题复现 复现步骤&#xff1a; rtplayer_test /data/boot.mp3串口输入"l", 循环播放串口输入"b" , 播放器后台执行 具体表现 rtpla…

软信天成:干货分享,如何实施云迁移策略!

当下&#xff0c;数据管理正在经历着一场时代的巨变。过去&#xff0c;本地数据库和数据仓库作为企业数据管理的重要手段一直为实现传统业务智能奠定基础。如今&#xff0c;随着云计算应用的迅速激增&#xff0c;越来越多的组织为把握机遇实现更高的业务敏捷度&#xff0c;准备…