函数基础

定义函数

def 函数名(一个或多个参数):
    函数体
    return 返回值

例:
    def print_name(name):
        print(name)
        return 返回值可以为空

    调用:print_name('wython')

# 注意:函数是先定义再调用,所以在定义阶段出现逻辑错误不会报错,只有调用的时候才会报。

调用函数

函数的调用就是函数名加括号
def func():
    pass
调用: func()

函数的返回值

函数的返回值:
    可以没有返回值,默认函数会返回None
    返回一个参数,可以赋值给一个变量
    返回多个参数,用逗号隔开,得到的是一个元组

什么时候该有返回值?
    调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
    通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不需要有返回值?
    调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
    通常无参函数不需要有返回值

参数的定义

位置参数:按照位置传参
    def func(name,sex,age):
        pass
    func('wython','male',18)
    # 会根据参数的位置依次传值

关键字参数:按照指定的关键字传值
    def func(name,sex,age):
        pass
    func(name='wython',sex='male',age=18)
    # 根据写的关键字传值,顺序可以打乱

默认参数:默认参数是key=value的形式,如果调用时根据关键字传值了会用传入的值,不传值就会用默认写的值
    def func(name='wython',sex='male',age=18):
        pass
    func(name='Eric')
    # 默认的name值会发生改变,sex和age没有传入值,就会用默认设置的

可变长参数:有些时候我们不知道会传入几个参数,我们就可以设置可变长参数
    def func(name,*args):
        pass 
    func('wython',17,male,student)
    # args参数打印就是一个元组(17,'male',student)

命名关键字参数:不确定会有多少关键字参数传入,用**kwargs
    def func(name,*args,**kwargs):
        pass 
    func('wython',17,male,student,teacher='lili',school='tiangong')

    # 函数func里面的参数name=wython,args=(17,'male','student'),kwargs={'teacher'='lili','school'='tiangong'}