<!-- [toc] -->

函数

  • def 函数定义关键字
  • 形参中 不需要声明类型 方便许多
  • 相比其他编程语言,它拥有多种传参方式,非常方便

定义

def 函数名(形参):
    """说明文档 可以用help(函数名)查询"""
    #函数体    
    #注意缩进
    
函数名(实参)

位置参数

  • 形参、实参的位置要对应
  • 一 一对应

关键字参数

  • 指定参数赋值
  • 在给实参时加入一个赋值语句,指定某个形参收到值
  • 调用时,一定注意,先传入位置变量后,才能关键字参数,使用顺序不能反了,反了报错。
#如这个例子
def sum(x,y):
    print(x+y)
sum(y=89,x=123)

默认参数定义

  • def sum(a=123,b=345)这样定义函数头

    • 在调用时,就可以不传参
    • 因为函数默认a为123 ,b为345

可变参数

位置可变参数

  • 接受所有位置参数,之后返回元组
  • 形参有多少参数,实参就有多少参数
def name(*args):
    print(args)
name('这是位置可变参数',1,2,3)

#返回 ('这是位置可变参数', 1, 2, 3)
#一个元组

关键字字典可变参数

  • 接受所有关键字参数,之后返回字典
  • 相比位置可变参数,多了一个*
  • 函数收到的是一个字典
def name(**args):
    print(args)
name(a='这是关键字可变参数',b=1,c=2,d=3)
#返回 {'a': '这是关键字可变参数', 'b': 1, 'c': 2, 'd': 3}
#是一个字典 键值对

注意

  • 变量不可以在函数外调用
  • 变量定义在函数外,则为全局变量,函数内可用

    • 如果必须更改 通常在函数中 声明变量为外部变量global a
    • 通常不建议在函数中更改外部变量

函数返回值

  • 返回值可以返回多个变量,用逗号分割即可。
  • 返回多个参数,接受变量为一个时,变量收到的是一个元组形式的。
  • 同上,可以用多参数接受
def name(a,b,c,d):
    return a,c

ret = name(a='这是关键字可变参数',b=1,c=2,d=3)
print(ret)
#返回的是 ('这是关键字可变参数', 2)

#字典拆包
a = {'a':1,'b':2,'c':3}
def name():
    return a

x,y,z = name()
print(x,y,z,sep='||')
print(a,a[y],a[z],sep='||')

函数递归

  • 递归就是套娃
  • 递归一定要有出口

递归加法例子

def sum(a):
    if a==1:
        return 1
    return a+sum(a-1) #相当于100+99+98+97 ······ +3+2+1

print(sum(100))#返回 5050