函数——基本语法,嵌套、匿名、高阶、递归函数

时间:2022-09-08 12:12:23
  • 定义
    • 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
  • 特性
    • 减小重复代码
    • 使程序变的可扩展
    • 易维护
  • 函数参数
    • 定义函数可以带参数,也可不带参数
    • 形参:只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数则不能再使用该形参变量
    • 实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
  • 默认参数
  • 1 def stu_register(name,age,course,country="CN"):
    #代码中country即为默认参数,当调用函数时,如果country不指定的话,则默认为“CN”,指定了的话,为指定的数
    #在定义函数时,默认参数要放在最后面
  • 关键参数
    • 正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只要指定参数名即可(指定了参数名的参数就叫关键参数)
    • 关键参数必须放在位置参数(以位置顺序确定的高对应关系的参数)之后
    • 1 def stu_register(name, age, course='PY' ,country='CN'):
      2
      3 #调用
      4 stu_register("王山炮",course='PY', age=22,country='JP' )
      5
      6 #不可以用下面这两条
      7 stu_register("王山炮",course='PY',22,country='JP' )
      8 stu_register("王山炮",22,age=25,country='JP'
  • 非固定参数  
    • 在定义函数时不确定用户想传入多少个参数,就可以使用非固定参数
    • *args:def func(a,*args),传过来的所有参数打包成元组发送给args,通常放在最后,要不然会截胡
    • 1 #方式一:
      2 send_alert('报警','z','w','q','a')
      3 #方式二:必须要带*
      4 send_alert('报警',*('z','w','q','a'))
      5 send_alert('报警',*['z','w','q','a'])
    • **kargs:def func(a,**kargs),会把多传入的参数变成一个字典形式发送给kargs
  • return
    • 终止函数,即使return后面还有代码,也不执行
    • 若函数没有return的话,函数返回None
  • 全局变量  &  局部变量
    • 局部变量:在函数内部定义的变量为局部变量,作用域为定义该变量的函数
    • 全局变量:在函数外,定义在函数外部一级代码的变量,全局能用,作用域为整个程序
    • 全局变量不能调用局部变量
    • 函数内部调用全局变量:只要函数内部没有和全局变量同名的局部变量即可
    • 在函数内修改全局变量:在函数内定义:global name,实际项目中,不建议用global,一般情况下不用
    • 在函数内部修改列表,可通过切片方式修改列表,如果要整体修改的话,就要使用global了
  • 嵌套函数
    • 函数内部可以再次定义函数
    • 执行需要被调用
  • 匿名函数
    • 不需要显示指定函数名
    • 1 calc = lambda x,y:x**y
      2 print(calc(2,5))
  • 高阶函数
    • 接收一个或多个函数作为输入
    • return返回另外一个函数
  • 递归函数
    • 在函数内部,可以调用其他函数,如果一个函数在内部调用自身函数,这个函数就是递归函数
    • 两个基本要素,只有具备了这两个基本要素,才能在有限次计算后得出结果
      • 边界条件:确定递归到何时终止,也称为递归出口。
      • 递归模式:大问题是如何分解为小问题的,也称为递归体。 
      • 函数——基本语法,嵌套、匿名、高阶、递归函数函数——基本语法,嵌套、匿名、高阶、递归函数
        1 def func(n):
        2 if n == 1:
        3 return 1
        4 return n*func(n-1)
        5 print(func(4))
        View Code