目录

  • 1.语法格式
  • 1.定义函数
  • 2.**调用函数**
  • 2.函数参数
  • 3.函数返回值
  • 4.变量作用域
  • 5.函数调用
  • 1.链式调用
  • 2.嵌套调用
  • 3.栈帧
  • 4.函数递归
  • 6.参数默认值
  • 7.关键字参数

  • 1.语法格式

    1.定义函数

  • 函数体需要带缩进:P
    def 函数名(形参列表):
    	函数体
    	return 返回值
    
  • 2.调用函数

  • 函数必须先定义,再使用
    函数名(实参列表)           # 不考虑返回值
    返回值 = 函数名(实参列表)   # 考虑返回值
    

  • 2.函数参数

  • Python里面,形参只要求个数相同,对类型没有要求 -> 动态类型
  • 只要保证传入的参数,在函数体内可以正常运转即可
  • 这一点与C/C++等语言不一样

  • 3.函数返回值

  • 返回值并不是必须的,可以有,也可以没有
  • Python中,一个函数可以返回多个值,使用,来分隔多个返回值
    def GetPoint():
    	x = 10
    	y = 20
    	return x, y
    	
    a, b = GetPoint()
    
  • 如果只想关注其中的部分返回值,可以使用_来占位,以起到忽略不想要的返回值的作用
    def GetPoint():
        x = 10
        y = 20
        return x, y
            
    _, b = GetPoint()
    

  • 4.变量作用域

  • 局部变量:在函数内部的变量
  • 全局变量:不在任何函数内部的变量
  • 变量只能在所在的函数内部生效
  • GetPoint() 内部定义的x, y只是在函数内部生效
  • 一旦出了函数的范围,这两个变量就不再生效了
  • 在不同的作用域中, 允许存在同名的变量
  • 虽然名字相同,实际上是不同的变量
  • 如果函数内部尝试访问的变量在局部不存在,就会尝试去全局作用域中查找
    # 以下代码会输出20
    x = 20
    
    def Test():
    	print(f'x = {x}')
    
    Test()
    
  • 如果想在函数内部修改全局变量的值,需要使用global关键字声明
  • 如果没有global声明,x = 20就会被Python认为是在函数内部定义了一个局部变量
    # 第一次输出:函数内部 x = 10
    # 第二次输出:函数外部 x = 10
    x = 20
    
    def test():
        global x
        x = 10
        print(f'函数内部 x = {x}')
        
    test()
    print(f'函数外部 x = {x}')
    
  • 注意:if, else, while, for等关键字也引入了代码块
  • 但是这些代码块不会对变量的作用域产生影响
  • 在上述语句代码块内定义的变量,可以在外面被访问
  • 这点则与C/C++不同,C/C++只要被{}括起来,就会影响变量作用域

  • 5.函数调用

    1.链式调用

  • 链式调用:把一个函数的返回值,作为另一个函数的参数
    print(AddNum(10, 20))
    
  • 执行顺序:先执行里面的函数,再一层一层往外执行外面的函数
  • 人话:要调用一个参数,就要先求它的参数:P
  • 2.嵌套调用

  • 嵌套调用:函数内部还可以调用其他的函数
    def test():
        print("执行函数内部代码")
    
  • 一个函数里面可以嵌套调用任意多个函数
  • 3.栈帧

  • 调用函数,则生成对应的栈帧
  • 每个变量是保存在各自的栈帧中的
  • 函数结束,则对应的栈帧就被销毁,里面存的变量自然也就没了
  • 4.函数递归

  • 递归:一个函数自己调用自己
  • 递归代码务必要保证
  • 存在递归结束条件
  • 每次递归的时候,要保证函数的实参是逐渐逼近结束条件的

  • 6.参数默认值

  • Python 中的函数,可以给形参指定默认值(缺省值)
  • 带有默认值的参数,可以在调用的时候不传参
  • 带有默认值的参数需要放到没有默认值的参数的后面
    def add(x, y, debug = False):
        if debug:
            print(f'调试信息: x={x}, y={y}')
        return x + y
        
    print(add(10, 20))
    print(add(10, 20, True))
    

  • 7.关键字参数

  • 位置参数:调用函数时,需要给函数指定实参,一般默认情况下是按照形参的顺序,来依次传递实参
  • 关键字参数:按照形参的名字来进行传参,可以调整传参顺序,显式指定当前实参传递给哪个形参
    # 第一次输出结果:x = 10, y = 20
    # 第二次输出结果:x = 200, y = 100
    def test(x, y):
        print(f'x = {x}')
        print(f'y = {y}')
        
    test(x=10, y=20)
    test(y=100, x=200)
    
  • 位置参数和关键字参数可以混用,但是要求位置参数在前,关键字参数灾后
  • 关键字参数一般搭配默认参数来使用
  • 作者:DieSnowK

    物联沃分享整理
    物联沃-IOTWORD物联网 » [Python][函数]详细讲解

    发表回复