成都网站建设市场,公司注册名字查询,海尔公司网站建设现状,wordpress图库插件目录 变量作用域函数执行过程链式调用嵌套调用 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 #x1f412;#x1f412;#x1f412;个人主页 #x1f978;#x1f978;#x1f978;C语言 #x1f43f;️#x1f43f;️#x1f43f;️C语言例题 个人主页 C语言 ️️️C语言例题 python 变量作用域
观察以下代码
def getPoint():x 10y 20return x, y
x, y getPoint()在这个代码中, 函数内部存在 x, y, 函数外部也有 x, y. 但是这两组 x, y 不是相同的变量, 而只是恰好有一样的名字.
变量只能在所在的函数内部生效 在函数 getPoint() 内部定义的 x, y 只是在函数内部生效. 一旦出了函数的范围, 这两个变量就不再生效了
def getPoint():x 10y 20return x, y
getPoint()
print(x, y)在不同的作用域中, 允许存在同名的变量 虽然名字相同, 实际上是不同的变量
x 20
def test():x 10print(f函数内部 x {x})
test()
print(f函数外部 x {x})在函数内部的变量, 也称为 “局部变量” 不在任何函数内部的变量, 也称为 “全局变量”
如果函数内部尝试访问的变量在局部不存在, 就会尝试去全局作用域中查找
x 20
def test():print(fx {x})
test()如果是想在函数内部, 修改全局变量的值, 需要使用 global 关键字声明
x 20
def test():global xx 10print(f函数内部 x {x})
test()
print(f函数外部 x {x})如果此处没有 global , 则函数内部的 x 10 就会被视为是创建一个局部变量 x, 这样就和全局变量 x 不相关了
if / while / for 等语句块不会影响到变量作用域 换而言之, 在 if / while / for 中定义的变量, 在语句外面也可以正常使用.
for i in range(1, 10):print(f函数内部 i {i})
print(f函数外部 i {i})函数执行过程
调用函数才会执行函数体代码. 不调用则不会执行. 函数体执行结束(或者遇到 return 语句), 则回到函数调用位置, 继续往下执行.
def test():print(执行函数内部代码)print(执行函数内部代码)print(执行函数内部代码)
print(1111)
test()
print(2222)
test()
print(3333)这个过程还可以使用 调试器来观察.
链式调用
前面的代码很多都是写作
# 判定是否是奇数
def isOdd(num):if num % 2 0:return Falseelse:return True
result isOdd(10)
print(result)实际上也可以简化写作
print(isOdd(10))把一个函数的返回值, 作为另一个函数的参数, 这种操作称为 链式调用
嵌套调用
函数内部还可以调用其他的函数, 这个动作称为 嵌套调用
def test():print(执行函数内部代码)print(执行函数内部代码)print(执行函数内部代码)test 函数内部调用了 print 函数, 这里就属于嵌套调用 一个函数里面可以嵌套调用任意多个函数
函数嵌套的过程是非常灵活的
def a():print(函数 a)
def b():print(函数 b)a()
def c():print(函数 c)b()
def d():print(函数 d)c()
d()如果把代码稍微调整, 打印结果则可能发生很大变化.
def a():print(函数 a)
def b():a()print(函数 b)
def c():b()print(函数 c)
def d():c()print(函数 d)
d()注意体会上述代码的执行顺序. 可以通过画图的方式来理解.
函数之间的调用关系, 在 Python 中会使用一个特定的数据结构来表示, 称为 函数调用栈 . 每次函数调用,都会在调用栈里新增一个元素, 称为 栈帧.
每个函数的局部变量, 都包含在自己的栈帧中
def a():num1 10print(函数 a)
def b():num2 20a()print(函数 b)
def c():num3 30b()print(函数 c)
def d():num4 40c()print(函数 d)
d()