day6-基础函数的学习(一)

今日份目录

1.函数的定义

2.函数的返回值

3.函数的参数

4.函数的局部变量

5.函数中修改全局变量

6.嵌套函数


继续今日份预习!

正文开始

随着学习进度的逐渐的加深发现我们的函数体越来重复化越来越严重,太多重复代码,这会让我们的代码的可读性越来越差

1.函数的定义

定义:将一组语句集合通过一个名字(函数名)封装起来,只需要执行,调用其函数名

print sayhi ---->返回内存地址

print sayhi()---->返回函数内的内容

特性:

  1. 减少重复代码
  2. 使程序变得可扩展
  3. 使程序变得易维护

哎,跟着金老师开会儿车,虽然我也不懂怎么用,很多人应该都用过探探或者陌陌这类型聊天交友软件,现在写一下大概的软件的搭建

def tantan():
    print('打开手机!')
    print('打开软件!')
    print('附件的人!找到附近的人!')
    print('左滑一下!')
    print('右滑一下!')
    print('锁定目标,联系!')
    print('一起大胆约会吧!相约。。。。。')

tantan()#函数的执行者(调用者)
#这大概就是使用探探的整个流程了,每次用都是在调用tantan这个函数,就不需要各种重复代码了!
2.函数的返回值

我们运行一个函数,函数外部的代码如果需要获取函数内的执行结果,就可以用函数内的return语句把结果返回

return 默认返回这

def tantan():
    print('打开手机!')
    print('打开软件!')
    print('附件的人!找到附近的人!')
    print('左滑一下!')
    print('右滑一下!')
    return
    print('锁定目标,联系!')
    print('一起大胆约会吧!')

tantan()
print(666)
#返回值
打开手机!
打开软件!
附件的人!找到附近的人!
左滑一下!
右滑一下!
666
我们会发现函数在碰到return就会推出函数的运行,跳出函数的运行,return默认值为空
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
根据上面三段代码我们总结出以下几条
  1. 函数在碰到return就会结束函数,并将值返回函数执行者
  2. return默认返回值为空
  3. return返回单个值得时候,值是什么类型,返回值就是什么类型
  4. return返回多个值得时候,会将多个值用逗号分隔,返回一个元祖
  5. 函数返回值永远只能返回一个值

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)
3.1 实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值.

以一个学生注册的函数来解释实参

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")
3.1.1位置参数:按照位置调用顺序,一个一个的调用,传入四个值则则会和下面的调用一一匹配,如果将传入的值调换位置,虽不会报错,显示的内容并不会一样
第一种结果
----注册学生信息------
姓名: 王山炮
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.嵌套函数

猜你喜欢

转载自www.cnblogs.com/gbq-dog/p/10186993.html