PYTHON知识点学习-函数(中)

🚀write in front🚀
🔎大家好,我是Aileen★。希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
🆔本文由 Aileen_0v0★ 原创 CSDN首发🐒 如需转载还请通知⚠
📝个人主页:Aileen_0v0★—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:Aileen_0v0★的PYTHON学习系列专栏——CSDN博客
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本

6a78491801a74bbd8d932659b06e11db.gif#pic_center

目录

函数-变量的作用域

1.1区分全局变量和局部变量

1.2通过gobal关键字改变全局变量数值

函数-执行过程

2.1如何利用间断点进行调试

2.2debug step summary(调试步骤总结):

函数-链式调用

3.1链式调用的概念及例子

3.2链式调用的注意事项

函数-嵌套调用

4.1嵌套调用概念及例子

4.2利用间断点调式展示嵌套调用的运行过程

函数-局部变量和栈帧

5.1什么是调用栈

5.2栈帧与局部变量的关系


函数-变量的作用域

def getPoint():
    x = 10
    y = 20
    return x, y

x, y = getPoint()
print(x,y)

1.1区分全局变量和局部变量

思考:上面的函数里面的x y 和 函数外面的 x y 是同一组变量吗?

--->不是同一组变量!只不过名字恰好相同!!

--->函数内部的变量名,只能在函数内部生效,出了函数,就无效了!!

ea263fda42594ad08e4b49774d8c40d0.png

8117c758fbf84f598c2c875b80bed702.png

函数内部和函数外部是可以使用同名的变量的.虽然变量名相同,但是是不同的变量!!

x = 10  #全局变量,是在整个程序中都有效的~
def test():
    x = 20  #局部变量,只是在函数内部有效
    print(f'函数内部:{x}')

test()
print(f"函数外部:{x}")

全局变量:在整个程序中都有效~

局部变量:只在函数内部有效~

函数里,也是可以使用全局变量的~

x = 10
def test():
    print(f"x = {x}")
test()

3791b33cef2444888ce5ccc71aecf299.png

在函数里尝试读取全局变量,是可以的!

函数中尝试访问某个变量的时候,会先尝试在局部变量中查找,如果找到,就直接访问

如果没有找到,就会往上一级作用域进行查找~

test 再往上一级作用域,就是全局了~ ~

1.2通过gobal关键字改变全局变量数值

589fb623758b47da98a9a28542b58d30.png1a98609b90dd412bb87212ed0f64e978.png

summary:

没有global,此时就会把x = 20 当作是在 函数内部创建了一个局部变量 x

而实际上是要 修改全局变量 x ~

为了让 函数里面 知道 x 是个全局变量 ~

就使用 global 关键字先声明一下 ~

python 中,if , else , while , for 这些关键字也会引入 "代码块",但是这些代码块不会对变量的作用域产生影响!

上述语句内部定义的变量,可以在外面被访问!!

如下示例:

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

print("-------------------------")
print(i)
if True:
    x = 10

print(x)

python只有函数才会影响作用域,so 函数里面创建变量 ,是不能够直接访问的,

如果想要将函数里面的值交给外面访问,就要使用return 语句返回出去,

然后在调用的位置上进行接收,然后才能进行使用.

函数-执行过程

0281678db6354758875e0b9106cdb58b.png

函数执行就像是有一堆任务的你,不知道从哪开始,东做做,西做做,不断间隔重复做的过程~

d2544c69971d420e9c2479653f34fed4.jpeg933fa3ab6f114ddeb1d348ae80d51ab5.jpeg

2.1如何利用间断点进行调试

b30a04356c9e41f992324e9f99c3f355.png

先给第一个 打印这里 加个断点,然后调试执行,在断点处,程序就暂停了~ ~

就可以让代码"单步执行":

0e4dd459e4f341d6a525e9c5de95254f.png

6fd081407df9480a80c17ca92dcaf477.png

956e2b3d9d2e4cb3bbc318d9fa89f801.png

通过Debugger可以看到每一步的运行过程.

2.2debug step summary(调试步骤总结):

1.先在开始调试处加间断点.

2.右击鼠标开始调试,程序会真的快速运行到调试点暂停.

3.然后点击单步执行的按钮就可以通过一次次点击查看每一步的运行过程.

Python中间断点的作用是在程序运行过程中暂停程序执行,以便程序员可以检查和修改变量、调试代码、查看代码执行路径等操作。

函数-链式调用

3.1链式调用的概念及例子

链式调用:用一个函数的返回值,作为另一个函数的参数.

def isOdd(num):
    if num % 2 == 0:
        return False
    return True

def add(x,y):
    return x+y

print(isOdd(add(5,5)))

3.2链式调用的注意事项

链式调用中,是先执行()里面的函数,后执行外面的函数~ ~

换句话说,调用一个函数,就需要先对它的参数求值~

链式调用的时候,也不要嵌套的层次太深! 影响可读性的!

函数-嵌套调用

4.1嵌套调用概念及例子

嵌套调用:一个函数函数体内部,还可以调用其它函数.

def test():
    print("hello")#内部print函数

test()#外部test函数
def a():
    print("函数 a")


def b():
    print("函数 b")
    a()


def c():
    print("函数 c")
    b()


def d():
    print("函数 d")
    c()

d()

#------------------------------
运行结果:
函数 d 
函数 c 
函数 b 
函数 a

def a():
    print("函数 a")


def b():
    a()
    print("函数 b")

def c():
    b()
    print("函数 c")

def d():
    c()
    print("函数 d")

d()

#-----------------------------------
#运行结果:
#函数 a
#函数 b
#函数 c
#函数 d

4.2利用间断点调式展示嵌套调用的运行过程

函数-局部变量和栈帧

5.1什么是调用栈

首先让我们看看下面这段代码调试的过程

def a():
    num1 = 10
    print("函数 a")


def b():
    num2 = 20
    a()
    print("函数 b")

def c():
    num3 = 30
    b()
    print("函数 c")

def d():
    num4 = 40
    c()
    print("函数 d")

d()

调试器的左下角,能够看到函数之间的 "调用栈"

调用栈里面描述了当前这个代码的函数之间调用关系是啥~ ~

每一层这个调用关系就称为"函数的栈帧",每个函数的局部变量就在这个栈帧中体现的~


5.2栈帧与局部变量的关系

从上面可以看出局部变量和栈帧就像是同生共死的好朋友一样~

每一层栈帧,你选中了之后,都能看到里面的局部变量

每个函数的局部变量就保存在对应得栈帧中~ ~

调用函数,则生成对应的栈帧.

函数结束,则对应的栈帧消亡(里面的局部变量也就disappear了)

让我们用debug调试一下这段代码~


这就是今天的函数知识点分享啦~

喜欢就一键三连支持一下吧~

谢谢家人们!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring-Cloud-Openfeign如何传递用户信息?

用户信息传递 微服务系统中,前端会携带登录生成的token访问后端接口,请求会首先到达网关,网关一般会做token解析,然后把解析出来的用户ID放到http的请求头中继续传递给后端的微服务,微服务中会有拦截器来做用户信息的…

笔试题目回忆

&#xff08;1&#xff09;给出n,k&#xff0c;n表示数组个数&#xff0c;k表示要剔除的个数&#xff0c;接下来n个数为数组元素&#xff0c;求剔除k个数之后&#xff0c;其他所有数互为倍数&#xff0c;每个数最多剔除一次。 未检测代码&#xff0c;超时。 #include <ios…

软件外包开发人员分类

在软件开发中&#xff0c;通常会分为前端开发和后端开发&#xff0c;下面和大家分享软件开发中的前端开发和后端开发分类和各自的职责&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 前端开发&…

Dump文件的生成以及使用WinDbg静态分析

前言 本文章主要介绍了如何生成Dump文件&#xff0c;包括两种方式&#xff0c;通过代码生成和通过注册表生成。并且介绍了WinDbg工具的下载和使用&#xff0c;以及如何使用WinDbg工具去静态分析Dump文件&#xff0c;从而找到程序的崩溃位置。 生成Dump文件 通过调用WinAPI生成…

OpenCV模块介绍

其中core、highgui、imgproc是最基础的模块&#xff0c;该课程主要是围绕这几个模块展开的&#xff0c;分别介绍如下: core模块实现了最核心的数据结构及其基本运算&#xff0c;如绘图函数、数组操作相关函数。 highgui模块实现了视频与图像的读取、显示、存储等接口。 imgp…

Kafka知识点总结

常见名词 生产者和消费者 同一个消费组下的消费者订阅同一个topic时&#xff0c;只能有一个消费者收到消息 要想让订阅同一个topic的消费者都能收到信息&#xff0c;需将它们放到不同的组中 分区机制 启动方法 生成者和消费者监听客户端

stable diffusion实践操作-大模型介绍

本文专门开一节写大模型相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 模型下载网站 国内的是&#xff1a;https://www.liblibai.com 国外的是&#xff1a;https://civitai.com&#xff08;科学上网&#xff09; 一、发展历…

一个面向MCU的小型前后台系统

JxOS简介 JxOS面向MCU的小型前后台系统&#xff0c;提供消息、事件等服务&#xff0c;以及软件定时器&#xff0c;低功耗管理&#xff0c;按键&#xff0c;led等常用功能模块。 gitee仓库地址为&#xff08;复制到浏览器打开&#xff09;&#xff1a; https://gitee.com/jer…

linux安装firefox

1.下载对应包 https://www.mozilla.org/en-US/firefox/all/#product-desktop-release 2. 挂载桌面链接(如果/usr/bin/firefox下有的话,先删除) ln -s /opt/firefox/firefox /usr/bin/firefox 3.执行以下命令&#xff0c;即可启动Firefox客户端&#xff1a; firefox

WSL中为Ubuntu和Debian设置固定IP的终极指南

文章目录 **WSL中为Ubuntu和Debian设置固定IP的终极指南****引言/背景****1. 传统方法****2. 新方法:添加指定IP而不是更改IP****结论**WSL中为Ubuntu和Debian设置固定IP的终极指南 引言/背景 随着WSL(Windows Subsystem for Linux)的普及,越来越多的开发者开始在Windows…

WPF Material Design 初次使用

文章目录 前言相关资源快速开始快速开始说明地址 吐槽一下 前言 MD全称MaterialDesignInXamlToolkit&#xff0c;MaterialDesign和Bootstrap一样&#xff0c;都是一个UI风格库。相当于衣服中的休闲服&#xff0c;汉服&#xff0c;牛仔裤一样&#xff0c;就是风格不一样的Ui框架…

VS + QT 封装带UI界面的DLL

一、创建编译DLL的项目 1.新建Qt Class Liabrary 2.新建项目&#xff0c;选择Qt Widgets Class 3.新建C类&#xff0c;可以在此类里面写算法函数用于调用。 4.下面是添加完Qt窗体类和C类之后的项目截图 5.修改头文件并编译 将uidemo_global.h中的ifdef内容复制到dialog.h上…

leetcode 1365. 有多少小于当前数字的数字

2023.9.2 本题直观的解法就是双层for循环暴力求解&#xff1a; 暴力解&#xff1a; class Solution { public:vector<int> smallerNumbersThanCurrent(vector<int>& nums) {vector<int> ans;for(int i0; i<nums.size(); i){int temp 0;//比当前元素…

ESP32C3 LuatOS RC522②写入字符串

编写了字符串转16进制表函数 -- 将字符串转换为十六进制表 local function stringToHexTable(str)local hexTable {}local maxLength 16 -- 最大长度为16个元素-- 将字符串转换为十六进制for i 1, #str doif i > maxLength thenbreakendlocal hex string.format("…

Node基础and包管理工具

Node基础 fs 模块 fs 全称为 file system&#xff0c;称之为 文件系统&#xff0c;是 Node.js 中的 内置模块&#xff0c;可以对计算机中的磁盘进行操作。 本章节会介绍如下几个操作&#xff1a; 1. 文件写入 2. 文件读取 3. 文件移动与重命名 4. 文件删除 5. 文件夹操作 6. …

每日一题(链表中倒数第k个节点)

每日一题&#xff08;链表中倒数第k个节点&#xff09; 链表中倒数第k个结点_牛客网 (nowcoder.com) 思路: 如下图所示&#xff1a;此题仍然定义两个指针&#xff0c;fast指针和slow指针&#xff0c;假设链表的长度是5&#xff0c;k是3&#xff0c;那么倒数第3个节点就是值为…

项目总结知识点记录-文件上传下载(三)

&#xff08;1&#xff09;文件上传 代码&#xff1a; RequestMapping(value "doUpload", method RequestMethod.POST)public String doUpload(ModelAttribute BookHelper bookHelper, Model model, HttpSession session) throws IllegalStateException, IOExcepti…

Git使用

本地操作 1. 初始化git仓库 git init 把当前目录变成git可以管理的仓库 git init2.登录-身份认证 区别登录和注册 git config --global user.name “xxx” git config --global user.email “xxxqq.com”/3.下载别人的git git clone https://gitee.com/meini/user-menage…

Gorm简单了解

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. 04_GORM查询操作_哔哩哔哩_bilibili 前置&#xff1a; db调用操作语句中间加debug&#xff08;&#xff09;可以显示对应的sql语句 1.Gorm模型定义&#xff08;理解重点&#xff…

色温曲线坐标轴的选取:G/R、G/B还是R/G、B/G ?

海思色温曲线坐标 Mstar色温曲线坐标 高通色温曲线坐标 联咏色温曲线坐标 查看各家白平衡调试界面&#xff0c;比如海思、Mstart、高通等调试资料&#xff0c;白平衡模块都是以R/G B/G作为坐标系的两个坐标轴&#xff0c;也有方案是以G/R G/B作为坐标系的两个坐标轴。 以G/R G…