• python基础语法(六)


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

    变量作用域

    观察以下代码

    def getPoint():
    	x = 10
    	y = 20
    	return x, y
    x, y = getPoint()
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

    def getPoint():
    	x = 10
    	y = 20
    	return x, y
    getPoint()
    print(x, y)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    x = 20
    def test():
    	x = 10
    	print(f'函数内部 x = {x}')
    test()
    print(f'函数外部 x = {x}')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    x = 20
    def test():
    	print(f'x = {x}')
    test()
    
    • 1
    • 2
    • 3
    • 4

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

    x = 20
    def test():
    	global x
    	x = 10
    	print(f'函数内部 x = {x}')
    test()
    print(f'函数外部 x = {x}')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果此处没有 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}')
    
    • 1
    • 2
    • 3

    函数执行过程

    调用函数才会执行函数体代码. 不调用则不会执行.
    函数体执行结束(或者遇到 return 语句), 则回到函数调用位置, 继续往下执行.

    def test():
    	print("执行函数内部代码")
    	print("执行函数内部代码")
    	print("执行函数内部代码")
    print("1111")
    test()
    print("2222")
    test()
    print("3333")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这个过程还可以使用 调试器来观察.

    链式调用

    前面的代码很多都是写作

    # 判定是否是奇数
    def isOdd(num):
    	if num % 2 == 0:
    		return False
    	else:
    		return True
    result = isOdd(10)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    实际上也可以简化写作

    print(isOdd(10))
    
    • 1

    把一个函数的返回值, 作为另一个函数的参数, 这种操作称为 链式调用

    嵌套调用

    函数内部还可以调用其他的函数, 这个动作称为 "嵌套调用

    def test():
    	print("执行函数内部代码")
    	print("执行函数内部代码")
    	print("执行函数内部代码")
    
    • 1
    • 2
    • 3
    • 4

    test 函数内部调用了 print 函数, 这里就属于嵌套调用
    一个函数里面可以嵌套调用任意多个函数

    函数嵌套的过程是非常灵活的

    def a():
    	print("函数 a")
    def b():
    	print("函数 b")
    	a()
    def c():
    	print("函数 c")
    	b()
    def d():
    	print("函数 d")
    	c()
    d()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    如果把代码稍微调整, 打印结果则可能发生很大变化.

    def a():
    	print("函数 a")
    def b():
    	a()
    	print("函数 b")
    def c():
    	b()
    	print("函数 c")
    def d():
    	c()
    	print("函数 d")
    d()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注意体会上述代码的执行顺序. 可以通过画图的方式来理解.

    函数之间的调用关系, 在 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    MATLAB中sos2tf函数用法
    10-19 HttpServletResponse
    C++ NULL 与nullptr 区别
    华为开源自研AI框架昇思MindSpore应用案例:消噪的Diffusion扩散模型
    MySQL之事务和redo日志
    MySQL索引、事务与存储引擎
    Spring核心API
    客户案例:CACTER邮件网关护航首钢集团重保任务
    CF-926AC USB无线网卡 Ubuntu使用
    03_Ribbon
  • 原文地址:https://blog.csdn.net/2301_79178723/article/details/133950933