函数
1.函数参数两大分类
1.形式参数(形参)
在函数定义阶段括号内所填写的参数#形参
2.实际参数(实参)
在函数调用阶段括号内所填写的参数#实参
3.形参和实参的关系
我们可以将形参看成变量名,实参看成变量值
两者的关系在函数调用阶段临时绑定,函数体代码运行结束断开
#形参的表现形式只有一种,就是变量名(可以是任何变量名)
#实参的表现形式有很多种(要把握核心《数据值》)

2.形参:定义函数设置的参数
1.位置形参 # 输入几个形参,调用就要输入几个实参
在函数定义阶段从左往右依次填入的变量名
2.默认形参
在定义阶段就将形参赋值,调用时不输入参数则使用默认值,输入则使用输入值
# def add(a,b,c='3')
3.可变长位置形参 *
将多余的位置形参以统一添加到一个元组中赋值给*后面的变量名
4.可变长关键字形参 **
将多余的关键字形参统一添加到一个字典中赋值给**后面的变量名
'''
墨守成规
可边长形参 * 与 ** 后面的变量名可以随便定义
但是Python中推荐使用
*args
**kwargs
'''

3.实参:调用函数输入的参数
1.位置实参 # 输入几个形参,调用就要输入几个实参
调用阶段从左到右输入的数据值
2.关键字实参 # 可以打破位置参数的顺序
调用阶段将设置的形参名=输入的数据值指名道姓的输入,输入方式要根据格式越简单的越要靠前,越复杂的越要靠后的原则
3.可变长位置实参 *
调用阶段可以输入多个位置实参,会以元组的形式赋值给*后面的变量名 # 如果输入的为列表的变量名可以直接*list,会按照位置一一传入,组成一个元组
4.可变长关键字实参 **
调用阶段可以输入多个关键字实参组织成一个字典等号两边分别是K:V键值对 # 如果输的为字典的变量名可以直接**dict,会以单个键值对的方式一一传入组成一个字典

函数参数补充了解
位置形参,可变长位置形参,位置形参的函数参数
def register(name,age,*,sex,height):
pass
在调用函数阶段一定要以位置实参,输入多个位置实参后输入关键字实参才可以

名称空间
什么是名称空间(namespaces)
用于存放变量名与变量值绑定关系的地方(绑定之后需要有个地方记录这个关系的绑定)
名称空间分类
1.内置名称空间
Python解释器提前定义好的函数所取出的名字
2.全局
py文件定格编写的代码运行之后所定义的变量值与变量名之间的绑定,函数名,for循环的i,while循环内部的变量名,if判断的变量名
3.局部
函数体代码内部的变量名
名字查找的顺序
根据所在的位置进行查找
如果在函数体代码中
局部>>>全局>>>内置
如果在全局中
全局>>>内置
函数体代码内部名字定义:只要是定义好的就不能更改,调用从内部调用,依次向外扩散,如果存在变量名存在,但在代码执行之后,则会报错
# 局部名称空间的嵌套
'''函数在定义阶段名字的查找顺序就已经固定死了(特例)'''
x = 111
def f1():
x = 222
def f2():
x = 333
def f3():
x = 444
def f4():
x = 555
print(x)
# x = 555 特例,如果上面的x=555换到下面,就会报错
f4()
f3()
f2()
# 通过调用f1 执行所有的函数
f1()
# 存活周期
1.内置名称空间
python解释器启动与关闭而创建和销毁
2.全局名称空间
随着py文件的运行与结束而创建和销毁
3.局部名称空间
随着函数体代码的执行与结束而创建和销毁
