函数
    python函数组成:        定义语句,函数名,参数列表,代码块    函数作用:        将一段功能代码封装起来,便于复用.        代码更加简洁.    函数的分类:        內建函数: 如,max()等        库函数: 如,math.ceil()等    函数的定义:        def语句定义函数(定义后的函数才能使用)        def functionNAME([args_list]):            代码块            [return value]        函数名的规范和标识符规范相同.        缩进约定为4个空格        return语句可省略,但其默认返回值是None        例:            def fn(x):                return x    函数的调用:        通过函数名来调用此函数,functionNAME([args_list])        函数时可调用的对象,callable()函数检查此对象是否可调用        例:            fn(1)
参数

    形参: 函数定义时所使用的参数    实参: 函数调用时所使用的参数    传参: 实参根据形参的匹配规则,逐一传递给形参    参数默认值: 定义时,在形参后跟上一个值(可变参数无默认值)        作用:            当实参未给足时,对没有给定的参数赋值为默认值             参数过多,简化函数调用

    形参有:        位置参数、可变位置参数、可变关键字参数、keyword-only参数    实参有:        位置参数、关键字参数

    形参:        位置参数,可接受一个实参,根据实参传递的顺序从左至右依次匹配            表示方式: 参数名,例: def fn(x)        可变位置参数,可接受任意个位置实参(包括0个),在位置参数被取完后,其余都被其接收            表示方式: '*'号后跟参数名,例: def fn(*args)            将一组位置参数形成一个tuple        可变关键字参数,可接受任意个关键字实参(包括0个),在关键字参数被取完后,其余都被其接收            表示方式: '**'号后跟参数名,例: def fn(**kwargs)            将一组关键字参数形成一个字典        keyword-only参数,在可变位置参数之后的普通参数,可接受一个实参,按左右顺序与实参匹配            表示方式:                 1.'*', 后跟普通参数                    例: def fn(*,x,y) , x和y是keyword-only参数                2.可变位置参数后跟普通参数                    例: def fn(*args,x,y) , x和y是keyword-only参数

    实参:        位置参数: 可以是集合对象,可迭代对象,可看做一个整体的单个对象.例: (1,2),{1,2},[1,2],list(range(1,3)),1        关键字参数: name = value 格式的参数.例: 'a' = 1

    形参定义顺序规则:        位置参数 --> 位置参数(含默认值) --> 可变位置参数 --> keyword-only参数 --> keyword-only参数(含默认值) --> 可变关键字参数    传参顺序:        位置参数 --> 关键字参数    实参与形参匹配规则:        位置实参传递时,形参从左至右依次匹配        关键字实参传递时,形参根据关键字来匹配,跟顺序无关

    动态语言和静态语言函数定义上的区别:        动态语言的函数的形参是没有类型的,因此在传递实参时,不会报错.        而静态语言的函数的形参是有类型的,因此在传递实参时,会直接报错.

参数解构(实参的解构)
    解构对象        集合类型        可迭代对象    解构符号*和**    *将非字典类型的解构对象解构成位置参数    **将字典类型的解构对象解构成关键字参数    提取出来的实参个数要与形参个数能匹配,实参类型得匹配