一,函数:实现具有特定功能的代码;特点:隐藏实现功能的细节 代码可重用 提高可读性 便于调试
1,语法:
def 函数名(形式参数(形参)1,形式参数2,....形式参数n):
要运行的代码(函数体)
return 输出的数据(返回值)
示例:输出一首古诗
def print_arch():
print('鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波')
print('*' * 50)
print('鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波')
print('*' * 50)
print('鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波')
print('*' * 50)
print_arch()
运行结果:
2,函数传参:
示例:
def print_verse(verse_name,isTitle,isDynasty):
if verse_name == '静夜思':
if isTitle == True:
print('静夜思-李白')
if isDynasty == True:
print('唐朝')
print('窗前明月光')
elif verse_name == '再别康桥':
if isTitle == True:
print('再别康桥-李白')
if isDynasty == True:
print('民国')
print('曲项向天歌')
print_verse('静夜思',True,False)
print('')
print_verse('再别康桥',True,True)
运行结果:
二,函数返回值:
对于函数来说return 不是必须,但是return语句执行后 函数将中断执行
示例1:编写汇率计算器 amt金额 source原始货币 target要转换的货币
人民币对美金汇率 6.7516 :1 amt、6.7516 = 美金
def exchange_rate_calc(amt,source,target):
if source == 'CNY' and target == 'USD':
result = amt / 6.7516
return result
e = exchange_rate_calc(100,'CNY','USD')
print(e)
#>>> 14.811303987203035 (200人民币转换为美金 是 14.811303987203035)
示例2:输入用户名和密码 输入正确显示 登录成功 否则显示 返回 请重新登录
def login(username,password):
username = input('请输入用户名:')
password = input('请输入密码:')
if username == 'imooc' and password == '123456':
print('登录成功')
return
else:
print('返回请重新登录')
e = login('imooc','123456')
运行结果:
三,函数的使用技巧
1,设置参数的默认值:只需要在形参后面增加 = 具体值 即可
示例:
def exchange_rate(amt,source = 'CNY',target = 'USD'):
if source == 'CNY' and target == 'USD':
result = amt / 6.7516
return result
elif source == 'CNY' and target == 'EUR':
result = amt / 7.7512
return result
print(exchange_rate(100)) #默认为人民币对美金的换算
#>>>> 14.811303987203035
print(exchange_rate(100,'CNY','EUR'))#人民币对欧元的换算
#>>>> 12.901228196924347
2,以形参形式传参(关键字传参)
示例:
def healthMsg(name,age,height,weight,hr,hbp,glu):#参数过多 建议封装成字典 将整个字典传过来
print('您的健康状况良好')
healthMsg('张三',18,185,65,80,120,4.3)#从阅读代码 比较繁琐,参数过多,看不出函数定义,要按照参数定义前后顺序书写;
healthMsg(name='张三',age=18,height=185,weight=65,hr=80,hbp=120,glu=4.3)#不必按照参数定义前后顺序书写;
# #混合形式传参:
# # * 代表之后所有参数传参时必须使用关键字传参
def healthMsg1(name,age,*,height,weight,hr,hbp,glu):
print('您的健康状况良好')
healthMsg1('张三',18,height=185,weight=6,hr=80,hbp=120,glu=4.3)
3,序列传参:利用序列为参数进行赋值:
示例:
def calc(a,b,c):
return (a + b) * c
d = [1,8,3]
print(calc(*d)) #>>>>27
4,字典传参:
def healthMsg(name,age,height,weight,hr,hbp,glu):
print('您的健康状况良好')
param = {'name':'张三','age':18,'height':185,'weight':65,'hr':80,'hbp':120,'glu':4.3}
healthMsg(**param)
5,返回值传参
示例:
def getInfor():
dict2 = {
'emp':[
{'name':'张三','age':18,'salary':500},
{'name': '李四', 'age': 28, 'salary': 600}
],
'device':[
{'id':'123456','title':'XX电脑'},
{'id': '55566', 'title': 'XX笔记本'}
]
}
return dict2
print(getInfor())
#输出>>{'emp': [{'name': '张三', 'age': 18, 'salary': 500}, {'name': '李四', 'age': 28, 'salary': 600}], 'device': [{'id': '123456', 'title': 'XX电脑'}, {'id': '55566', 'title': 'XX笔记本'}]}
#取值:例如取 李四的年龄 数据
n = getInfor().get('emp')[1].get('age')
print(n)#输出>> 28