今日份目录
1.函数的定义
2.函数的返回值
3.函数的参数
4.函数的局部变量
5.函数中修改全局变量
6.嵌套函数
继续今日份预习!
正文开始
随着学习进度的逐渐的加深发现我们的函数体越来重复化越来越严重,太多重复代码,这会让我们的代码的可读性越来越差
1.函数的定义
定义:将一组语句集合通过一个名字(函数名)封装起来,只需要执行,调用其函数名
print sayhi ---->返回内存地址
print sayhi()---->返回函数内的内容
特性:
- 减少重复代码
- 使程序变得可扩展
- 使程序变得易维护
哎,跟着金老师开会儿车,虽然我也不懂怎么用,很多人应该都用过探探或者陌陌这类型聊天交友软件,现在写一下大概的软件的搭建
def tantan(): print('打开手机!') print('打开软件!') print('附件的人!找到附近的人!') print('左滑一下!') print('右滑一下!') print('锁定目标,联系!') print('一起大胆约会吧!相约。。。。。') tantan()#函数的执行者(调用者) #这大概就是使用探探的整个流程了,每次用都是在调用tantan这个函数,就不需要各种重复代码了!
我们运行一个函数,函数外部的代码如果需要获取函数内的执行结果,就可以用函数内的return语句把结果返回
return 默认返回这
def tantan(): print('打开手机!') print('打开软件!') print('附件的人!找到附近的人!') print('左滑一下!') print('右滑一下!') return print('锁定目标,联系!') print('一起大胆约会吧!') tantan() print(666) #返回值 打开手机! 打开软件! 附件的人!找到附近的人! 左滑一下! 右滑一下! 666
def tantan(): print('打开手机!') print('打开软件!') print('附件的人!找到附近的人!') print('左滑一下!') print('右滑一下!') print('锁定目标,联系!') print('一起大胆约会吧!') return ('金刚芭比!') print(tantan(),type(tantan())) print(666) #结果 打开手机! 打开软件! 附件的人!找到附近的人! 左滑一下! 右滑一下! 锁定目标,联系! 一起大胆约会吧! 金刚芭比! <class 'str'> 666
def tantan(): print('打开手机!') print('打开软件!') print('附件的人!找到附近的人!') print('左滑一下!') print('右滑一下!') print('锁定目标,联系!') print('一起大胆约会吧!') # return ('金刚芭比!') return [1,100] ret = tantan() print(ret,type(ret)) print(666) #结果 打开手机! 打开软件! 附件的人!找到附近的人! 左滑一下! 右滑一下! 锁定目标,联系! 一起大胆约会吧! [1, 100] <class 'list'> 666
def tantan(): print('打开手机!') print('打开软件!') print('附件的人!找到附近的人!') print('左滑一下!') print('右滑一下!') print('锁定目标,联系!') print('一起大胆约会吧!') return ('金刚芭比!','洛天依','初音') ret = tantan() print(ret,type(ret)) print(666) #结果 打开手机! 打开软件! 附件的人!找到附近的人! 左滑一下! 右滑一下! 锁定目标,联系! 一起大胆约会吧! ('金刚芭比!', '洛天依', '初音') <class 'tuple'> 666
- 函数在碰到return就会结束函数,并将值返回函数执行者
- return默认返回值为空
- return返回单个值得时候,值是什么类型,返回值就是什么类型
- return返回多个值得时候,会将多个值用逗号分隔,返回一个元祖
- 函数返回值永远只能返回一个值
3.函数的参数
def tantan(a,b): #函数定义,形参:形式参数 print(a,b) print('打开手机!') print('打开软件!') print('附件的人!找到附近的人!') print('左滑一下!') print('右滑一下!') print('锁定目标,联系!') print('一起大胆约会吧!') return ('金刚芭比!','洛天依','初音') a = 3 b = 2 ret = tantan(a,b)#这个就是函数运行的主体 实参:这个里面的a和b就是实际参数 print(ret,type(ret)) print(666)
以一个学生注册的函数来解释实参
def stu_register(name,age,country,course): print("----注册学生信息------") print("姓名:", name) print("age:", age) print("国籍:", country) print("课程:", course) stu_register("王山炮",22,"CN","python_devops") stu_register("张叫春",21,"CN","linux") stu_register("刘老根",25,"CN","linux")
第一种结果 ----注册学生信息------ 姓名: 王山炮 age: 22 国籍: CN 课程: python_devops #调换姓名和年龄 ----注册学生信息------ 姓名: 22 age: 王山炮 国籍: CN 课程: python_devops
3.1.2关键字参数:既然上面的位置参数更改位置会更改内容,那么就有可以变更位置的参数
stu_register(name="王山炮",age=22,course="python_devops",country="CN") #结果 ----注册学生信息------ 姓名: 王山炮 age: 22 国籍: CN 课程: python_devops 发现我们把参数名称变更位置,函数还是会识别到传入的参数,放在正确的位置
3.1.3混合参数:就是将位置参数和关键字参数混合的输入
#按照关键字参数放在最前面 stu_register(name="王山炮",22,"python_devops","CN") 执行后报错 SyntaxError: positional argument follows keyword argument 翻译过来的意思就是关键字参数不能放在位置参数前面,应该放在位置参数后面
- 位置参数,从左到右,一一对应
- 关键字参数,一一对应,不过位置随意
- 混合参数,不过位置参数一定要在关键字参数前面
3.2 形参
形参:只有被调用时才会分配内存单元,调用结束时,释放分配的内存单元,形参只在函数内部有效,函数调用结束时返回主函数后不能再使用该形参
3.2.1位置参数:整体和实参的位置参数一致,默认一一对应
3.2.2默认参数:如果大量的数据都是默认值,则设定默认参数,如果需要更改在去更改
def stu_register(name,age,course,country='CN'): print("----注册学生信息------") print("姓名:", name) print("age:", age) print("国籍:", country) print("课程:", course) stu_register("王山炮",22,"python_devops",) stu_register("张叫春",21,"linux") stu_register("刘老根",25,"linux") #结果 ----注册学生信息------ 姓名: 王山炮 age: 22 国籍: CN 课程: python_devops ----注册学生信息------ 姓名: 张叫春 age: 21 国籍: CN 课程: linux ----注册学生信息------ 姓名: 刘老根 age: 25 国籍: CN 课程: linux
不过有个坑默认参数必须放在位置参数后,要不然也会报错
3.2.2.1默认参数的陷阱
#默认参数指向的是一个容器型数据类型,那么这个数据在内存中永远是同一个 def func1(a,l=[]): l.append(a) return l print(func1(666)) # [666] print(func1(22)) # [666,22] print(func1(33,[])) # [33] #结果 [666] [666, 22] [33]
万能参数:俩个形参接收所有实参传递过来的位置参数以及关键参数
def func1(*args,**kwargs)
总结一下
- 位置参数,从左到右,一一对应
- 默认参数,放在位置参数后面
- 万能餐宿,能接受实参角度所有的位置参数以及关键字参数
后续等待添加内容
4.局部变量
函数内外同一个名称的变量,俩个是不一样的,看例子
name = '1A' def change_name(): name ='2b' #函数内的name变更为2b,函数外定义的变量仍没有变更,俩者的内存地址不一样 print('里',name) change_name() print(name)#在函数内部定义的变量称之为局部变量 #结果 里 2b 1A
这样就可以引出全局和局部变量定义
局部变量:在函数结束后,局部变量从内存中清除,俩个函数的局部变量不能互相调用
全局变量:定义在函数外部一级代码的变量,叫全局变量,全局有效
函数内调用变量,优先为局部变量,无则调用全局变量
5.函数中修改全局变量
6.嵌套函数