主要内容:
1. 什么是函数
2. 函数定义, 函数名, 函数体以及函数的调⽤
3. 函数的返回值
4. 函数的参数
⼀. 什么是函数
定义⼀个事 情或者功能. 等到需要的时候直接去⽤就好了. 那么这⾥定义的东⻄就是⼀个函数.
函数: 对代码块和功能的封装和定义
⼆. 函数的定义,函数名, 函数体以及函数的调⽤
1.函数的定义(声明)
def关键字来定义函数
函数的定义语法: (函数名的命名规则和使用跟变量基本一样 )
def 函数名(形参): #函数的声明
函数体 #函数被执行之后要执行的代码
我们来定义⼀个功能:
def xuexi():
print("学习使我快乐,学习使我日渐消瘦")
定义完了. 但是这个时候去执⾏. 会发现什么都没有发⽣.
因为我只定义了⼀个函数. 但 是还没有执⾏过这个函数.
2.函数的调⽤
使⽤函数名可以调⽤函数
写法:
函数名(), 这个时候函数的函数体会被执⾏
def xuexi(): #定义一个函数
print("学习使我快乐,学习使我日渐消瘦") #函数体
xuexi() #函数的调用
结果是:
学习使我快乐,学习使我日渐消瘦
程序执行过程:
如果还行再次执行学习操作,多次调用就可以了:
def xuexi():
print("学习使我快乐,学习使我日渐消瘦")
#调用xuexi()函数
xuexi()
xuexi()
xuexi()
xuexi()
xuexi()
xuexi()
继续分析:
功能执行完之后,默认会返回一个值:None
三. 函数的返回
执⾏完函数之后. 我们可以使⽤return来返回结果.
return的使⽤:
1. 函数中遇到return, 此函数结束, 不再继续执⾏.
# 1. 每个函数如果在函数中不写return, 默认返回None
# 2. 我们也可以只写一个return, 也是返回None, 停止函数的执行
def yue():
print("约你")
print("约我")
print("约他")
return #return表示此函数结束,不再进行下一步,后面没有跟返回值,默认返回None
print("约谁呀") # 这句话不会被执⾏
yue()one
2. 给函数的调⽤者⼀个访问结果
def yue(): #定义一个函数
print("约你") #函数体
print("约我")
print("约他")
return "美⼥⼀枚" #返回值,可以是多个,调用方同时也接收多个
girl = yue() # 函数的调用,用变量girl来接收函数的返回值,先执行函数体,然后将return值赋值给变量girl
print(girl) # 美⼥⼀枚
3.函数的返回值可以是多个,当返回多个时,调用方接收多个,接收类型是tuple(元组),
可以后续对元组解构
def yue():
print("打开陌陌")
print("大阳哥出马")
return "大妈", "萝莉", "模特"
ret= yue() # 多个返回值在接受的位置接受到的是tuple类型的数据
print(ret) #结果是元组类型
结果是:
打开陌陌
大阳哥出马
('大妈', '萝莉', '模特')
a,b,c= yue() # 对返回值(元组类型)解构
print(a)
print(b)
print(c)
结果是:
打开陌陌
大阳哥出马
大妈
萝莉
模特
总结⼀下:
1. 遇到return. 此函数结束, 函数后⾯的东⻄将不会再执⾏
2. return 返回值
关于返回值:
如果return什么都不写 或者 ⼲脆不写return .那么返回的就是None
如果return后⾯写了⼀个值. 则调⽤者可以接收⼀个结果
如果return后⾯写了多个结果, 则调⽤者可以接收⼀个tuple, 调⽤者可以直接解构成 多个变量
四. 函数的参数(可以通过函数的参数来给函数传递一些信息)
参数:函数在调⽤的时候指定具体的⼀个变量的值. 就是参数.
# 参数: 在函数执行的时候给函数传递的信息
# 形参: 在函数声明的位置.声明出来变量
# 实参: 在函数调用的时候. 实际你给函数传递的值
# 函数的参数个数是没有要求的 但是,在运行的时候. 形参和实参要匹配. 按照位置把实参赋值给形参
# 参数的分类:
# 站在实参的角度:
# 1. 位置参数
# 2. 关键字参数
# 3. 混合参数, 注意顺序. 先写位置参数, 然后在写关键字参数. 否则会报错
# 站在形参的角度:
# 1. 位置参数
# 2. 默认值参数
# 3. 默认值参数和位置参数混合使用. 顺序: 先写位置参数. 然后在写默认值参数
语法:
def 函数名(形参列表): #函数的声明
函数体
函数名(实参列表) #函数的调用
#实参和形参位置是对应的,实参赋值给形参,例如people对应"自律者",
name对应"你和他"(这里的形参/实参都是位置参数)
def mingyan(people,name): #people形参,在声明变量的位置
print("%s得自由" % people)
print("那%s是%s吗?" % (name,people))
return "你猜","我干嘛要告诉你","你真是咸吃萝卜淡操心"
mingyan("自律者","你和他") #"自律者"实参,在函数调用的位置,在调用mingyan函数的时候给2个形参2个对应值
mingyan("谦让者","大部分人")
结果是:
自律者得自由
那你和他是自律者吗?
谦让者得自由
那大部分人是谦让者吗?
#实参包括位置参数和关键字参数
#形参包括位置参数和默认值参数
#实参和形参是相互匹配的,如果使用混合参数,不一一对应,那么要保证先写位置参数(位置参数需要一一对应)
def xinxi(xuexi,chifan,shangcesuo,shuijiao="床",dayouxi="吃鸡"): #参数能有多个 先写位置参数,再写默认参数
print(xuexi)
print(chifan)
print(shuijiao)
print(shangcesuo)
print(dayouxi)
# xinxi('python',"汉堡包",dayouxi="lol",shuijiao="床",shangcesuo="卫生间") #注意,先写完位置参数,再写关键字参数
xinxi("学习",shangcesuo="上厕所",chifan="黄焖鸡") #上面的形参里面有默认值,所以实参不用全部输完
xinxi("学习",shangcesuo="上厕所",chifan="黄焖鸡",dayouxi="王者荣耀") #实参可以修改形参的默认值
结果是:
学习
黄焖鸡
床
上厕所
吃鸡
学习
黄焖鸡
床
上厕所
王者荣耀
四. 函数的应用
#1+2+3+4+5+6+7+8+9+....+100 = ? 5050
# 函数是对功能的封装
def sum(n):
s = 0
count = 1
while count <= n:
s = s + count
count = count + 1
return s
ret = sum(100)
print(ret) #5050
#计算n是奇数还是偶数
def fn(n):
if n%2 == 0:
return "偶数"
return "奇数"
print(fn(456)) #偶数
今日主要内容:
1.函数:对功能的封装
2.语法:
def 函数名(形参):
函数体
函数名(实参)
3.函数名:命名规则和变量一样
4.函数的返回值:
return, 函数执行完毕. 不会执行后面逻辑
1. 如果函数中不写return返回None
2. 只写return 返回None
3. return 返回值. 返回一个值
4. return 值1, 值2,... 返回多个值. 调用方接收到的是元组
5.参数:
在函数执行的时候给函数传递的信息
1. 形参:
1. 位置参数.
2. 默认值参数. 当调用的时候不给传值使用默认值
3. 混合使用. 顺序: 1. 位置参数, 2, 默认值参数
2. 实参:
1.位置参数. 按照位置给形参赋值
2. 关键字参数. 按照名称给形参赋值
3. 混合参数. 先用位置参数, 再用关键字参数
预习:
1. 不定参数
2. 作用域的问题
3. global和nonlocal