一. 什么是函数
函数: 对代码块和功能的封装和定义.等到需要使用这个功能的时候直接调用就可以了.函数名命名规则和变量一样
二. 函数定义, 函数名, 函数体以及函数的调用
语法:def 函数名(形参):
函数体(代码块)
调用:
函数名(实参)
#定义一个函数名为day的函数,里面打印七条语句,从周一到周日. def day(): print('周一') print('周二') print('周三') print('周四') print('周五') print('周六') print('周日') day() #调用函数,然后执行函数day # 周一 # 周二 # 周三 # 周四 # 周五 # 周六 # 周日
三. 函数的返回值
函数的返回值:return, 函数执行完毕. 不会执行后面逻辑
1. 如果函数中不写return返回None
2. 只写return 返回None
3. return 返回值. 返回一个值
4. return 值1, 值2,... 返回多个值.多个值需要用,隔开.调用方接收到的是元组
def day(): print('周一') print('周二') print('周三') print('周四') print('周五') print('周六') print('周日') return '一周过完了' #遇到return,函数执行结束,不会继续执行下面的语句 print('新的一周就要来了') #在return语句后面,无法打印 print(day()) #调用函数,然后执行函数day # 周一 # 周二 # 周三 # 周四 # 周五 # 周六 # 周日 # 一周过完了
def f(): print('今天吃饭了吗') s = f() print(s) #没有return,所以返回值为None def f(): print('今天吃饭了吗') return #只有return,返回值仍为None ss = f() print(ss) #None
def day(): print('周一') print('周二') print('周三') print('周四') print('周五') print('周六') print('周日') return '一周结束','下一周就要开始了' #return值有两个,接收到的是元组 a,b = day() #函数返回值接收的是元组,可以解构来获取值 print(a) #一周结束 print(b) #下一周就要开始了
四. 函数的参数
参数, 函数在调用的时候指定具体的一个变量的值.
def day(c): print('周%s'%c) day('一') #周一 通过调用day函数把实参'一'的值传递给形参'c'
不仅可以定义函数打印语句,也可以定义函数拥有其他的功能,然后调用函数.
#定义两个数相加的函数 def q(a,b): #定义函数名为q的函数,形参是a,b s = a + b return s #返回值为s sss = q(3,5) #调用函数,把实参3,5传递给形参a,b print(sss) #8 #定义两个数互相对换的函数 def q(a,b): a,b = b,a return a,b #return的返回值是元组 a,b = q(3,5) print(a,b) #5,3
当函数的形参值很多时,我们在调用时写实参还要记着形参的位置,使用位置参数会很麻烦,可以使用关键字参数(按照名称给形参赋值)和混合参数(先用位置参数,
再用关键字参数). 最终到的结果都一样.
def f(name,age,sex,weight,height,hobby): print('name:%s,age:%s,sex:%s,weight:%s,height:%s,hobby:%s' %(name, age, sex, weight, height, hobby)) f('小小',18, '女', 90, 1.8, '吃饭') #使用位置参数 f(sex='女', hobby='吃饭', name='小小', height=1.8, weight=90, age=18) #使用关键字参数,不用在意形参的位置 f('小小', 18, '女', hobby='吃饭', height=1.8, weight=90) #使用混合参数 # name:小小,age:18,sex:女,weight:90,height:1.8,hobby:吃饭 # name:小小,age:18,sex:女,weight:90,height:1.8,hobby:吃饭 # name:小小,age:18,sex:女,weight:90,height:1.8,hobby:吃饭
函数的形参也可以为默认值参数(给参数一个具体的值)和混合参数(先用位置参数,再用默认值参数).
def f(name,age,sex='男',add='昌平'): #混合使用,name和age没有被赋值,是位置参数. sex和add都被赋值,是默认值参数 print('name:%s,age:%s,sex:%s,add:%s' %(name,age,sex,add)) f('小小',18) #sex默认为'男',add默认为'昌平' f('尔尔',22) f('哈哈',19,'女') #实参'女'传递给sex,sex值变成'女' f('天天',26,'女','沙河') #实参'沙河'传递给形参add,add的值为'沙河' # name:小小,age:18,sex:男,add:昌平 # name:尔尔,age:22,sex:男,add:昌平 # name:哈哈,age:19,sex:女,add:昌平 # name:天天,age:26,sex:女,add:沙河
总结形参和实参的分类:
1. 形参:
1. 位置参数.
2. 默认值参数. 当调用的时候不给传值使用默认值
3. 混合使用. 顺序: 1. 位置参数, 2, 默认值参数
2. 实参:
1.位置参数. 按照位置给形参赋值
2. 关键字参数. 按照名称给形参赋值
3. 混合参数. 先用位置参数, 再用关键字参数