1、函数定义及作用:
定义:函数就是组织好的,可以重复使用的,用来实现单一或者相关联功能的代码段
作用:提高代码的复用性
比如:print()/input() ---- Python内置函数
2、如何定义函数?
def 标识符(参数1,参数2,参数3...,参数n):
函数体(用来实现单一或者相关联功能的代码段)
return [表达式]
函数是否需要带上return?
默认情况,可以不要return或者return返回None
什么情况下,需要带返回值(return [表达式])
需要调用这个函数的调用方是否需要或许函数体中的某个值
3、函数调用
函数名(参数1值,参数2值,参数2值....参数n值)
默认情况下,参数值和参数名称是按照函数定义顺序匹配的
实际情况,项目中存在多个参数的函数,不一定需要用默认情况下这种调用函数,可以采用其他调用函数参数类型
4、调用函数事可使用的正式参数类型:
1)必需参数
必须以正确的顺序传入函数,调用时的数量必须和定义时一样的
必需参数(参数顺序、参数个数、参数类型都必须跟函数定义一致)
2)关键字参数(顺序不匹配)
允许函数调用时参数的顺序与定义不一致
使用关键字来确定传入的参数值
3)默认参数(个数不匹配)
调用函数时,可以对默认参数不传值,则取默认值,否则取传递的值
4)不定长参数
函数调用方无法确定参数的个数及类型在这情况下,可以定义为不定长参数
比如:定义注册函数?
A注册账号: A调用注册函数,提供姓名+手机号码(必填项)
B注册账号 B调用注册函数,提供姓名+手机号码(必填项)+工作城市+工作年限+其他信息
1)第一类 :加*参数名
函数内部把可变参数组装到元组中
调用(加*参数名)不定长参数:
函数名(参数值1,参数值2,参数值3....)
2)第二种:加**参数名
函数内部把可变参数组装到字典中
调用(加**参数名)不定长参数:
可以只传必需参数,也可以传入任意个数的关键字参数
函数名(参数1名=参数值1,参数2名=参数值2,参数3名=参数值3)
关键字参数的名称不受限制,可以任意关键字参数名称
3)第三类:*单独出现 命名关键字参数
命名关键字参数:作用:限制关键字参数的名字
关键字参数的名称受限制,关键字参数的名称跟定义的形参的名称一致
# 定义函数时候,参数顺序
必需参数、默认参数、可变参数(*参数名称/或者*)、命名关键字参数、**参数名(不限定参数名称关键字参数)
5、代码示例
#不带参数函数
def welcome():
return "欢迎进入霍格沃兹"
def goodbye():
print("谢谢对霍格沃兹关注")
# 调用没有参数函数
value=welcome()
print(value)
value2=goodbye()
print(value2)
"""
需求:求最大值
"""
# 带参数的函数 name形参
def welcome(name):
print(f"{name},欢迎进入霍格沃兹")
return
name='MS200'
# name 实参
welcome(name)
def max(a,b):
"""
求最大值
:param a:其中一个数
:param b: 其中一个数
:return:
"""
if a>b:
max=a
else:
max=b
return max
value=max(10,5)
print("求5,10的最大值:",value)
#就业榜单输出学员详细信息: 姓名 工作年限 城市 学前薪资 学后薪资
def offerinfo(name,work_age,work_city,pre_gz,bf_gz):
print(f"调用函数:offerinfo 姓名 :{name} ,工作年限:{work_age} , 所在城市:{work_city}, 学前薪资: {pre_gz}k ,"
f"学后薪资:{bf_gz}k ,涨薪{bf_gz-pre_gz}k")
# 必需参数(参数顺序、参数个数、参数类型都必须跟函数定义一致)
offerinfo('alone',2,'深圳',15,20)
# 关键字参数
offerinfo(work_age=2,name='alone',work_city='深圳',bf_gz=20,pre_gz=15)
def offerinfo2(name,work_age,pre_gz,bf_gz,work_city='深圳'):
print(f"调用函数:offerinfo2 姓名 :{name} ,工作年限:{work_age} , 所在城市:{work_city}, 学前薪资: {pre_gz}k ,"
f"学后薪资:{bf_gz}k ,涨薪{bf_gz-pre_gz}k")
# 默认参数
offerinfo2(work_age=2,name='alone',bf_gz=20,pre_gz=15,work_city='北京')
"""不定长参数"""
# 不定长参数函数(加*参数名)
def register(name,phone,*args):
# 把不确定的参数都存储在元组里args
print(args,type(args))
info=[name,phone]
for value in args:
info.append(value)
print(f"{name}注册成功")
print(f"打印{name}注册的个人信息:",info)
#调用不定长参数(加*参数名)
extra=("深圳","3",15000,25000,"深圳宝安洪浪北***")
register("B",'12345678912',*extra)
register("A",'15874198829')
# 不定长参数函数(加**参数名)
def register_yh(name,phone,**kwargs):
# 把不确定的参数都存储在字典里kwargs
print(kwargs, type(kwargs))
info = {"name":name,"phone":phone}
for key,value in kwargs.items():
info[key]=value
print(f"通过调用rigister_yh函数,完成{name}注册信息的填写")
print(f"打印{name}注册的个人信息:", info)
#调用不定长参数(加**参数名)
extra={'city': '深圳', 'workage': '3', 'xz': 15000, 'after_xz': 20000}
register_yh("B",'12345678912',city1=extra['city'],workage3=extra['workage'],xz=extra['xz'],after_xz=extra['after_xz'])
#更简洁的方式
register_yh("B",'12345678912',**extra)
# 不定长参数函数(*单独出现) * 作为命名关键字参数的分隔符,后面属于命名关键字参数(参数名称限定的了)
def register_3(name,phone,*,city,work_age):
print(name,phone,city,work_age)
#调用 不定长参数函数(*单独出现)
register_3("MS219",'1111111111',city="深圳",work_age="3年")
def register_4(name,phone,*args,city,work_age):
print(name,phone,args,city,work_age)
register_4("register_4",'1111111111',city="深圳",work_age="3年")
# 定义一个函数实现计算多个数字之和
def sum(*args):
sum=0
for num in args:
sum+=num
return sum
value1=sum(1,2)
value2=sum(22,44)
value3=sum(1,2,3,4,5,6,7,8,9,10)
print(value1,value2,value3)
# 封装函数涨薪情况,获取涨薪幅度多少,并展示学员的信息
def xz_up(name,phone,*,xz,qwxz,**kwargs):
"""涨薪=学后薪资-学前薪资"""
info={"name":name,"phone":phone}
for key,vale in kwargs.items():
info[key]=vale
print(f"vip学习涨薪:{xz-qwxz}元,学员信息:{info}")
extra={'city': '深圳', 'workage': '3年'}
xz_up('MS201',"1111111111",xz=20000,qwxz=15000,**extra)