函数基础


01.函数是由若干语句组成的语句块、函数由名称和参数列表构成,它是组织代码的最小单元。

  • 函数的功能包括:
    • 结构化编程对代码的最基本封装,一般按照功能组织一段代码。
      • 封装的目的是为了复用,减少冗余代码。
    • 使代码更加简洁美观,可读易懂。
  • 函数的分类包括:
    • 内建函数,如max()、reversed()等。
    • 函数库,如math.ceil()等。
    • 自定义函数,以def关键字开头的代码段,其实现由用户自定义。


02.python使用def关键字来定义函数,其格式为:

def 函数名(参数列表):
    函数体;
    [return 返回值]
  • 函数定义的注意事项:
    • 函数名就是标识符,命名要求和变量一致。
    • 函数中语句块必须缩进,约定4个空格。
    • 函数如果没有定义return语句,会隐式的返回一个None值。
    • 函数中的参数列表为形式参数,只是一种符号表达,称为形参。
  • 函数调用的注意事项:
    • 函数调用的方式为”函数名()”;如有参数,则在括号内写入参数。
    • 函数调用时传入的是实际参数,是实实在在的值,称为实参。
    • 函数的定义需要在调用之前完成,否则会抛NameError的异常。
  • 函数定义和调用的示例:
def plus(x, y):
    return x+y;

result = plus(7, 14)
print(result)
  • 函数是可调用的对象,callable(plus)。


03.python函数的执行流程:

  • 创建如下的示例函数:
def fun1(a, b):
    print("fun1 called", a, b)

def fun2(c):
    fun3(c)
    print("fun2 called", c)

def fun3(d):
    print("fun3 called", d)

def main():
    print("main called")
    fun1(100, 200)
    fun2(300)
    print("main ending")


if __name__ == "__main__":
    main()
  • 在全局帧中生成fun1、fun2、fun3及main函数对象。
  • main函数调用。
  • main中查找内建函数print压栈,将常量字符串压栈;调用函数,弹出栈顶(print)。
  • main中查找函数fun1,将常量100、200压栈,调用函数fun1,创建栈帧。
    • 将print函数压栈,字符串和变量a、b压栈;调用函数,弹出栈顶(print)。
    • fun1函数执行完毕,弹出栈顶(fun1),返回值。
  • main中查找函数fun2,将常量300压栈,调用函数fun2,创建栈帧。
    • 将函数fun3压栈,变量c引用压栈;调用函数fun3,创建栈帧。
      • fun3完成print函数调用后返回,弹出栈顶(fun3),返回值。
    • fun2恢复调用,执行print函数后返回值。
    • fun2函数执行完毕,弹出栈顶(fun2),返回值。
  • main中查找内建函数print压栈,将常量字符串压栈;调用函数,弹出栈顶(print)。
  • main函数执行完毕,弹出栈顶(main),返回值。
文档更新时间: 2020-09-20 17:19   作者:闻骏