python基础语法(六)

目录

  • 变量作用域
  • 函数执行过程
  • 链式调用
  • 嵌套调用

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒个人主页
🥸🥸🥸C语言
🐿️🐿️🐿️C语言例题
🐣🐓🏀python

变量作用域

观察以下代码

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

在这个代码中, 函数内部存在 x, y, 函数外部也有 x, y.
但是这两组 x, y 不是相同的变量, 而只是恰好有一样的名字.

变量只能在所在的函数内部生效
在函数 getPoint() 内部定义的 x, y 只是在函数内部生效. 一旦出了函数的范围, 这两个变量就不再生效了

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

在不同的作用域中, 允许存在同名的变量
虽然名字相同, 实际上是不同的变量

x = 20
def test():
	x = 10
	print(f'函数内部 x = {x}')
test()
print(f'函数外部 x = {x}')

在函数内部的变量, 也称为 “局部变量”
不在任何函数内部的变量, 也称为 “全局变量”

如果函数内部尝试访问的变量在局部不存在, 就会尝试去全局作用域中查找

x = 20
def test():
	print(f'x = {x}')
test()

如果是想在函数内部, 修改全局变量的值, 需要使用 global 关键字声明

x = 20
def test():
	global x
	x = 10
	print(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 False
	else:
		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 = 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()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年11月2日
下一篇 2023年11月2日

相关推荐