详解函数的嵌套调⽤和局部变量 | 手把手教你入门Python之四十二-阿里云开发者社区

开发者社区> KB小秘书> 正文

详解函数的嵌套调⽤和局部变量 | 手把手教你入门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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
xcode反汇编调试iOS模拟器程序(六)函数出入口处的处理与局部变量
引用第二节的例子: 函数的入口处,通常都是把esp的值传给ebp保存,然后下面的操作以ebp为基准做偏移量引用。因为esp作为栈指针,push和pop都会自动修改其值,所以用ebp可以不受影响。
708 0
函数的⽂档说明 | 手把手教你入门Python之四十一
本节重点介绍函数的⽂档说明,函数应⽤:打印图形和数学计算
1118 0
JavaScript创建对象(四)——组合使用构造函数和原型模式
在JavaScript创建对象(三)——原型模式中,我们阐述了原型模式存在的两个问题:一是没办法通过构造函数初始化对象属性,二是共享引用类型的数据导致数据错乱。
825 0
Haskell函数式编程之四-List操作
List在函数式语言中是一个重要的抽象,很多事情离了它就很难做到。函数式语言的鼻祖Lisp名称就来自List processing。 Haskell本身也给List操作提供了一系列的操作符以及库函数。
758 0
JavaScript基础(四)函数
函数 函数的定义 //第一种:(函数的声明)第一种定义方法最强大,定义完毕后,在哪里使用都可以,无位置限制。 function fn1(){ console.log("我是第一种定义方法!"); } //第二种(函数表达式:匿名函数) :后两种定义方法是有局限性的。
902 0
javascript callback函数的理解与使用
最近做的一个项目中用到了callback函数,于是就研究了下总结下我对javascript callback的理解 首先从callback的字面翻译“回调” 可以理解这是一个函数被调用的机制 当我们遇到一个名词首先可能是百度谷歌搜索看官方是怎么解释的下面是维基百科对回调的定义: a callba...
513 0
+关注
1091
文章
1253
问答
来源圈子
更多
Python学习资料大全,包含Python编程学习、实战案例分享、开发者必知词条等内容。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载