详解函数的嵌套调⽤和局部变量 | 手把手教你入门Python之四十二

简介: 本节重点介绍函数的嵌套调⽤

上一篇:函数的⽂档说明 | 手把手教你入门Python之四十一
下一篇:详解函数返回值和参数 | 手把手教你入门Python之四十三

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

函数的嵌套调⽤

def testB():
 print('---- testB start----')
 print('这⾥是testB函数执⾏的代码...(省略)...')
 print('---- testB end----')
def testA():
 print('---- testA start----')
 testB()
 print('---- testA end----')
testA()

结果:

---- testA start----
---- testB start----
这⾥是testB函数执⾏的代码...(省略)...
---- testB end----
---- testA end----

小总结

  • ⼀个函数⾥⾯⼜调⽤了另外⼀个函数,这就是所谓的函数嵌套调⽤
    image.png
  • 如果函数A中,调⽤了另外⼀个函数B,那么先把函数B中的任务都执⾏完毕之后才会回到上次 函数A执
    ⾏的位置

image.png
image.png
image.png
image.png

局部变量

  • 局部变量,就是在函数内部定义的变量
  • 其作⽤范围是这个函数内部,即只能在这个函数中使⽤,在函数的外部是不能使⽤的
  • 因为其作⽤范围只是在⾃⼰的函数内部,所以不同的函数可以定义相同名字的局部变量(打个⽐⽅,把
    你、我是当做成函数,把局部变量理解为每个⼈⼿⾥的⼿机,你可有个iPhone8,我当然也可以有个

iPhone8了, 互不相关)

  • 局部变量的作⽤,为了临时保存数据需要在函数中定义变量来进⾏存储
  • 当函数调⽤时,局部变量被创建,当函数调⽤完成后这个变量就不能够使⽤了

如下图所示:
image.png

全局变量

如果⼀个变量,既能在⼀个函数中使⽤,也能在其他的函数中使⽤,这样的变量就是全局变量
打个⽐⽅:有2个兄弟 各⾃都有⼿机,各⾃有⾃⼰的⼩秘密在⼿机⾥,不让另外⼀⽅使⽤(可以理解为局部
变量);但是家⾥的电话是2个兄弟都可以随便使⽤的(可以理解为全局变量)

# 定义全局变量
a = 100
def test1():
 print(a) # 虽然没有定义变量a但是依然可以获取其数据
def test2():
 print(a) # 虽然没有定义变量a但是依然可以获取其数据
# 调⽤函数
test1()
test2()

运行结果:
image.png

总结1

  • 在函数外边定义的变量叫做 全局变量
  • 全局变量能够在所有的函数中进⾏访问

全局变量和局部变量名字相同问题

看如下代码:
image.png

总结2

  • 当函数内出现局部变量和全局变量相同名字时,函数内部中的 变量名 = 数据 此时理解为定义了⼀个
    局部变量,⽽不是修改全局变量的值

修改全局变量

函数中进⾏使⽤时可否进⾏修改呢?
代码如下:

image.png

总结3

  • 如果在函数中出现 global 全局变量的名字 那么这个函数中即使出现和全局变量名相同
    的 变量名 = 数据 也理解为对全局变量进⾏修改,⽽不是定义局部变量
  • 如果在⼀个函数中需要对多个全局变量进⾏修改,那么可以⼀次性全部声明,也可以分开声明
# 可以使⽤⼀次global对多个全局变量进⾏声明
global a, b
# 还可以⽤多次global声明都是可以的
# global a
# global b

查看所有的全局变量和局部变量

Python提供了两个内置函数globals()和locals()可以⽤来查看所有的全局变量和局部变量。

def test():
 a = 100
 b = 40
 print(locals()) # {'a': 100, 'b': 40}
test()
x = 'good'
y = True
print(globals()) # {'__name__': '__main__', '__doc__': None, '__package__': None,
 '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x101710630>
, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (bui
lt-in)>, '__file__': '/Users/jiangwei/Desktop/Test/test.py', '__cached__': None, '
test': <function test at 0x101695268>, 'x': 'good', 'y': True}

image.png
image.png

相关文章
|
1天前
|
存储 人工智能 数据挖掘
Python编程入门:从基础到实战
【9月更文挑战第26天】 在这篇文章中,我们将一起探索Python编程的奇妙世界。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和技巧。我们将从Python的基本语法开始,然后逐步深入到更复杂的主题,如函数、类和模块。最后,我们将通过一个实际的项目来应用我们所学的知识。让我们一起开始这段Python编程之旅吧!
|
2天前
|
数据采集 人工智能 数据挖掘
Python编程入门:从基础到实战的快速指南
【9月更文挑战第25天】本文旨在为初学者提供一个简明扼要的Python编程入门指南。通过介绍Python的基本概念、语法规则以及实际案例分析,帮助读者迅速掌握Python编程的核心技能。文章将避免使用复杂的专业术语,而是采用通俗易懂的语言和直观的例子来阐述概念,确保内容的可读性和实用性。
|
2天前
|
设计模式 开发者 Python
Python中的装饰器:从入门到精通
【9月更文挑战第25天】本文深入浅出地介绍了Python装饰器的使用,包括其定义、语法和实际应用。通过实例演示如何利用装饰器增强函数功能,同时探讨了装饰器的高级用法如带参数的装饰器和装饰器嵌套。最后,文章强调了在设计装饰器时应避免的常见陷阱。
|
2天前
|
前端开发 开发者 Python
从零到一:Python Web框架中的模板引擎入门与进阶
在Web开发的广阔世界里,模板引擎是连接后端逻辑与前端展示的重要桥梁。对于Python Web开发者而言,掌握模板引擎的使用是从零到一构建动态网站或应用不可或缺的一步。本文将带你从基础入门到进阶应用,深入了解Python Web框架中的模板引擎。
11 3
|
1天前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
8 1
|
1天前
|
调度 Python
揭秘Python并发编程核心:深入理解协程与异步函数的工作原理
在Python异步编程领域,协程与异步函数成为处理并发任务的关键工具。协程(微线程)比操作系统线程更轻量级,通过`async def`定义并在遇到`await`表达式时暂停执行。异步函数利用`await`实现任务间的切换。事件循环作为异步编程的核心,负责调度任务;`asyncio`库提供了事件循环的管理。Future对象则优雅地处理异步结果。掌握这些概念,可使代码更高效、简洁且易于维护。
7 1
|
2天前
|
Python Windows
python入门保姆级教程 | 13
python入门保姆级教程 | 13
|
2天前
|
设计模式 缓存 中间件
探索Python中的装饰器:从入门到实践
【9月更文挑战第25天】本文通过直观的语言和生动的比喻,深入浅出地介绍Python装饰器的概念、原理及应用。我们将一起走进装饰器的魔法世界,解锁其在代码编写中的强大功能,让你的代码更加优雅和高效。
|
1天前
|
开发者 Python
Python 中的 Input 函数及其实现机制
Python 中的 Input 函数及其实现机制
|
Python
python 嵌套字典取值增强版
python 嵌套字典取值增强版