python函数
函数类似于工具,提前定义好了可以反复使用

函数语法结构
1.def
定义函数关键字(必须)
2.函数名
函数的名字,相当于变量名,函数名的命名风格与规范遵循变量名的(必须)
3.参数1,参数2
参数可以没有也可以有多个,表示使用函数前需要一些条件(不必须)
4.函数注释
类似于产品说明书,主要用于介绍函数功能,参数使用及其他情况(不必须)
5.函数体代码(重要)
函数的核心的代码逻辑(必须)
6.return返回值
使用函数后返回给使用者的结果(不必须)

函数的定义与调用
1.函数必须先定义在调用(顺序不能乱)
2.函数在定义阶段只会检查语法不执行代码
3.函数在调用阶段才会执行函数体代码
ps:调用函数需函数名加括号,如果函数在定义阶段有参数则在调用阶段也需要给参数

函数的分类
1.内置函数
python解释器自带的函数(提前定义好了,直接使用即可)
2.自定义函数
2.1有参函数
在函数定义阶段括号内没有写参数(变量名)
2.2无参函数
在函数定义阶段括号内写了参数(变量名)
2.3空函数
函数体代码为空,空函数本身没有意义,但是可以提前规定编写代码的思路

函数参数的两大分类
形式参数
在函数定义阶段括号内写的参数,简称"形参"
实际参数
在函数调用阶段括号内所写的参数,简称"实参"
ps:我们可以将形参看成变量名,实参看成变量值,两者在函数调用时临时绑定,运行结束后断开
形参的表现方式只有一种就是变量名,实参的表现方式有很多种(但是把握核心,就是数据值)

位置参数
按照从左到右的顺序依次填入的参数
位置形参
在函数定义阶段按照从左到右的顺序依次填入的变量名
位置实参
在函数调用阶段按照从左到右的顺序依次填入的数据值
ps:位置形参与位置实参在函数调用阶段,按照位子一一绑定,位置参数在绑定时多一个不行,少一个也不行

关键字实参(可以打破位置顺序)
在函数调用阶段通过形参名=数据值的形式指名道姓的传值

ps:格式越简单越靠前,格式越复杂越靠后

默认参数
默认形参
函数在定义阶段就可以给形参赋值了
该形参在调用阶段不给值则使用默认的
该形参在调用阶段如果给值,则使用给的值

ps:位置形参与默认值形参在定义的时候,位置形参必须在默认值前面,越简单越靠前,越复杂越靠后
可变长参数
可变长形参
函数无论传入多少位置参数都可以正常运行
一个星号用于接收多余的位置参数(*号后面建议跟args)

两个星号用于接收多余的关键字参数(**号建议跟kwargs)

两者联用

*会在实参中会将列表,元组的元素打散成位置参数一一传值

**号会在实参中将字典内键值对打散成关键字元素参数传入

函数参数补充
命名关键字参数

名称空间
名称空间就是存放变量名与变量值绑定关系的地方(类似民政局)
名称空间分类
内置名称空间(python解释器启动与关闭而创建和销毁)

python解释器提前给定义好的
全局名称空间(随着py文件的创建与结束而创建和销毁)

在python顶格编写的代码运行后会存入全局名称空间
局部名称空间

函数体代码运行后产生的都是局部名称空间
名字查找顺序
如果在局部
局部>>>全局>>>内置
如果在全局
全局>>>内置
局部空间的嵌套

特例

名称空间的作用域
作用域
名称空间所能够作用的范围
内置名称空间
程序任何阶段任何位置均可使用(全局有效)
全局名称空间
程序任何阶段任何位置均可使用(全局有效)
局部名称空间
一般情况下只在各自的局部名称空间中有效

global与nonlocal关键字使用
关键字global

关键字nonlocal

函数对象(函数名)
函数名遇到括号就会调用!!!
1.函数名可以当做变量名赋值

2.函数名还可以当做函数的实参

3.函数名可以当做函数的返回值

4.函数名可以当做容器类型(内部可以存放多个数据)的元素

函数的嵌套调用
嵌套调用就是函数内部调用其他函数

函数的嵌套定义
函数体内部定义其他函数
将复杂的功能全部隐藏起来,暴露一个简单的接口

闭包函数
闭:定义在函数内部的函数
包:内部函数使用了外部函数名称空间中的名字
只有符合上述两个特征的函数才可以称之为"闭包函数"

闭包函数其实是给函数传参的第二种方式

装饰器
器:指的是工具
装饰:给被装饰对象添加额外的功能
装饰器原则
开放封闭原则
开发:对扩展开放
封闭:对修改封闭
装饰器核心思想
在不改变被"装饰对象内部代码"和"原有调用方式"的基础之上添加额外功能
统计index函数的执行时间

未完待续...
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv9302