Python-自定义函数

Python自定义函数

    • 声明
    • 定义函数
    • 调用函数
    • 空函数
    • 函数返回值
    • 函数参数
      • 默认参数
      • 可变参数
      • 关键字参数
      • 命名关键字参数
      • 参数组合
    • 递归函数
      • 递归优化--尾递归
      • 递归的优缺点

声明

本篇内容是记录廖雪峰老师的python教程笔记。
原教程网址为:https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888#0

定义函数

使用def定义函数,格式如下:

def f_name(f_para1,f_para2,…):
#此处缩进4格书写函数体

调用函数

  • 同一py文件下的,可以通过f_name(参数)调用
  • 调用另一py文件下的函数,使用from 文件名(无py) import f_name

空函数

def empty():
pass

函数返回值

  • return
    返回None
  • return x
    返回x
  • return x1,x2,x3,…
    返回一个tuple(x1,x2,x3,…)

函数参数

默认参数

def test(x,y=2)
此时默认y的值为2,在调用函数时,可以同时传入两个数分别赋给x,y,例如:test(3,3)
也可只传一个参数,赋给x,y此时取默认值2 ,例如:test(3)

默认参数必须指向不变对象(不变对象一旦创建,对象内部的数据就不能修改,减少了由于修改数据导致的错误)

可变参数

在参数前面加入==*==号,表示传入参数个数不确定,可以传入任意个参数,包括0个参数。
这些可变参数,在函数调用时自动组装为一个tuple。

关键字参数

允许传入0/人一个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
在参数前面加入==**==号,表明这是一个关键字参数。

命名关键字参数

闲置关键字参数的名字,例如只接受city和job作为关键字参数,定义的函数如下:
def person(name, age, , city, job):
*后面的参数被视为命名关键字参数。
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符
了。
命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错:
命名关键字参数可以有缺省值,从而简化调用;

参数组合

5种参数可以组合使用,但是,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

递归函数

递归优化–尾递归

为了防止栈溢出,将递归优化为尾递归,在return时不返回表达式,仅返回递归函数本身。
遗憾的是,大多数编程语言没有针对尾递归做优化,Python解释器也没有做优化,所以,即使把上面的fact(n)函数改成尾递归方式,也会导致栈溢出。

递归的优缺点

优点:逻辑简单清晰
缺点:过深调用会导致栈溢出

你可能感兴趣的:(python学习)