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

news2025/1/24 5:45:34

🚀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调试一下这段代码~


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

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

谢谢家人们!

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

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

相关文章

MySQL InnoDB 是怎么使用 B+ 树存数据的?

这里限定 MySQL InnoDB 存储引擎来进行阐述,避免不必要的阅读歧义。 首先通过一篇文章简要了解下 B 树的相关知识:你好,我是B树 。 B 树是在 B 树基础上的变种,主要区别包括: 1、所有数据都存储在叶节点,其…

第 112 场 LeetCode 双周赛题解

A 判断通过操作能否让字符串相等 I s 1 s1 s1和 s 2 s2 s2第 1 1 1、 2 2 2位若同位置不等,则 s 1 s1 s1交换对应的 i i i和 j j j位置,之后判断 s 1 s1 s1和 s 2 s2 s2是否相当 class Solution { public:bool canBeEqual(string s1, string s2) {for (i…

VBA中如何将if写到一行

在VBA中,可以使用以下两种方式来编写一行if语句: 使用三元运算符: Dim result As String result "Yes" If True Else "No"在这个例子中,如果条件为真,则result变量的值为"Yes"&#…

LeetCode 82 删除排序链表中的重复元素 II

LeetCode 82 删除排序链表中的重复元素 II 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/description/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目&am…

2023年的深度学习入门指南(26) - 在自己电脑上运行通义千问7b模型

2023年的深度学习入门指南(26) - 在自己电脑上运行通义千问7b模型 通过量化,通义千问4位量化的模型大小为5.86G,可以在3060等小于16G的家用GPU上也可以运行起来。 通义千问7b的量化运行 通义千问7b提供了4位量化好的Qwen/Qwen-7B-Chat-Int4模型&#…

基于Gin框架的HTTP接口限速实践

在当今的微服务架构和RESTful API主导的时代,HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大,接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能,接口限速成了一个重要的话题。 1 接口限速的使用场景 接口…

失效的访问控制漏洞复现(dvwa)

文章目录 失效访问控制是什么?dvwa漏洞复现用未授权访问获取shell 代码审计 失效访问控制是什么? 由于缺乏自动化的检测和应用程序开发人员缺乏有效 的功能测试,因而访问控制缺陷很常见。导致攻击者可以冒充用户、管理员或拥有特权的用户&…

【LeetCode题目详解】1281题 整数的各位积和之差 面试题 01.01. 判定字符是否唯一 python题解(作业一二)

本文章以python为例! 一、力扣第1281题:整数的各位积和之差 问题描述: 1281. 整数的各位积和之差 给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例 1: 输入:n 234 输出…

多线程的五种“打开”方式

1 概念 1.1 线程是什么?? 线程(Thread)是计算机科学中的一个基本概念,它是进程(Process)中的一个执行单元,负责执行程序的指令序列。线程是操作系统能够进行调度和执行的最小单位。…

Linux系统编程5(线程概念详解)

线程同进程一样都是OS中非常重要的部分,线程的应用场景非常的广泛,试想我们使用的视频软件,在网络不是很好的情况下,通常会采取下载的方式,现在你很想立即观看,又想下载,于是你点击了下载并且在…

zabbix模版和监控项

zabbix添加监控主机的流程 自定义监控项实现流程 被控端添加监控项 /etc/zabbix_agent2.d/xxx.conf UserParameterkey , 命令 ; restart服务器端测试 zabbix_get -s 主机 -k keyweb 创建模板web 在模板添加监控项web 模板关联至主机观察数据和图形 创建监控项名称 获取监控项…

Python之分支-循环

Python之分支-循环 程序控制 顺序 按照先后顺序一条条执行。 a 1 b a 1 c max(a, b) d c 100 # 这是顺序执行分支 根据不同的情况判断,条件满足执行某条件下的语句。 if 真(True)真执行的语句体passpassif True:pass else:pass # 单分支if语句这行的最后…

CP Autosar-Ethernet配置

文章目录 前言一、Eth层级结构介绍二、Autosar实践2.1 ETH Driver2.2 Eth InterfaceEth Interface Autosar配置2.3 TcpIp模块Eth TcpIp Autosar配置2.4 SoAdEth SoAd配置前言 因汽车E/E架构和功能的复杂度提升而带来的对车辆数据传输带宽提高和通讯方式改变(基于服务的通讯-S…

程序开发:构建功能强大的应用的艺术

程序开发是在今天的数字化时代中扮演重要角色的一项技术。通过编写代码,开发人员能创造出无数不同的应用,从简单的计算器到复杂的社交平台。电子商务应用、在线教育平台、医疗记录系统等,都重视程序开发的重要性,通过这其中的交互…

mybatis源码学习-2-项目结构

写在前面,这里会有很多借鉴的内容,有以下三个原因 本博客只是作为本人学习记录并用以分享,并不是专业的技术型博客笔者是位刚刚开始尝试阅读源码的人,对源码的阅读流程乃至整体架构并不熟悉,观看他人博客可以帮助我快速入门如果只是笔者自己观看,难免会有很多弄不懂乃至理解错误…

人工智能论文通用创新点(一)——ACMIX 卷积与注意力融合、GCnet(全局特征融合)、Coordinate_attention、SPD(可替换下采样)

1.ACMIX 卷积与注意力融合 论文地址:https://arxiv.org/pdf/2111.14556.pdf 为了实现卷积与注意力的融合,我们让特征图经过两个路径,一个路径经过卷积,另外一个路径经过Transformer,但是,现在有一个问题,卷积路径比较快,Transformer比较慢。因此,我们让Q,K,V通过1*1的…

SAP_ABAP_SCREEN_屏幕案例

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型,ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977 一 背…

机器视觉工程师,有哪几种类型

1.光学实验室(打光机器视觉工程师,一般此职位,要求有光学学历的背景最佳) 2.机器视觉算法开发工程师(此职位国内稀缺)3.机器视觉工程师/机器视觉开发工程师(MV工程师/MV工程师)&…

Unity动态设置天空盒

代码设置环境贴图 在LightingSetting面板中的设置方式 代码设置方式 RenderSettings.skybox material;

【Spring面试题】IOC控制反转和DI依赖注入(详解)

IOC Inversion of Control 控制反转,是一种面向对象的思想。 控制反转就是把创建和管理 bean 的过程转移给了第三方。而这个第三方,就是 Spring IoC Container,对于 IoC 来说,最重要的就是容器。 通俗点讲,因为项目…