我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。
上篇文章我们讨论了函数的参数。今天我们继续学习一下函数的返回值。
1、返回值
函数执行后可以有返回值,也可以没有返回值。
没有返回值的例子:
#定义函数,传参有默认值
def greet(name,greetvalue ='GOOD morning!'):
print(name,greetvalue)
如上面的函数调用后只是打印输出问候,没有返回值。
greet("mom")
需要返回值的时候通过return value 来实现,注意:在调用函数时,可以把这个返回值赋给一个变量,用于保存函数返回值以便后面使用。也可以有多个返回值。
举例说明:
需求:如一个超市做活动,客户购买的商品满100打9折,满300打8折,满500打6折
编写一段代码实现计算,可以让客户输入每个商品的价格,输入0表示输入商品结束。
需要输出打折前的总共的消费金额,打折后商品的总价,参考代码:
#计算打折前,打折后商品的总价,传参进来时列表
def summary_pro(list_money):
sum_money_pri = sum(list_money) #计算列表中元素之和,即商品打折前总价
if sum_money_pri >= 600:
sum_money_new = sum_money_pri*0.6
elif sum_money_pri >= 300:
sum_money_new = sum_money_pri * 0.8
elif sum_money_pri >= 100:
sum_money_new = sum_money_pri * 0.9
else:
sum_money_new = sum_money_pri
return sum_money_pri,sum_money_new
#计算商品打折的例子;可以通过函数输出打折前、打折后商品总价
#设置提示,请输入商品价格
print("\n请开始输入商品价格\n")
#可以将输入的商品价格放到列表存储
list_pro_money = []
#输入商品,然后插入到列表,一直到输入0结束
while True:
pro_money = float(input("输入你要的商品金额,注意输入0为结束:"))#注意要转换为浮点数
if int(pro_money) == 0: #注意,浮点数转换为整数,不然不等于0
break
else:
list_pro_money.append(pro_money) #商品金额插入到列表
#调用计算函数,输出打折前,打折后商品总价
sum_money = summary_pro(list_pro_money)
print("优惠前商品总价:{:.2f},优惠后商品总价:{:.2f}",sum_money[0],sum_money[1])
查看输出结果:
2、变量的作用域
变量的作用域是指程序代码能够访问变量的区域。若是超出该区域,访问就会报错。
一般根据变量的作用范围分为:局部变量、全局变量
1)局部变量
在Python中,局部变量是在函数内部定义的变量。它们只能在函数内部访问,函数外部无法直接访问。局部变量的作用范围仅限于函数内部,函数执行完毕后,局部变量会被销毁。若是在函数外调用就会发生异常。
举例说明:
#举例局部变量
def my_function():
local_variable = "I am local"
print(local_variable)
my_function()
print(local_variable) #函数外调用,对应会报错
2)全局变量
局部变量在函数外没法使用,这时候可以使用全局变量,它能够作用于函数内外的变量。
可以两种方式实现全局变量的定义,1、变量在函数外部定义
2、变量在函数外部定义,但是使用global 来修饰
注意,我们最好使用第一种方式,第二种方式容易造成混乱。
第一种举例:
#student_greet全局变量,函数外可使用
student_greet = "Good morning!"
def student_morning(greet_cont):
print(student_greet)
student_morning(student_greet)
print("见到学生说:",student_greet)
输出参考:
第二种举例:
messages = "我是一个兵,来自老百姓"
print("函数外部的:messages=",messages)
def out_messages():
global messages #内部变量被修改为全局变量
messages = "我是一个兵,来自老百姓,不怕流血不怕牺牲"
print("函数内部的:messages=", messages)
out_messages()
print("函数外部的:messages=",messages) #全局变量就被改变
输出参考:
3、匿名函数
匿名函数(lamda)是指没有名字的函数,应用在需要定义一个函数但是又不想费力命名这个函数的情况下使用。
这样的函数只使用一次。
参考语法: result = lamada[arg1[,arg2,….,argn]]:expression
说明: result ---用于调用lamada 表达式
[arg1[,arg2,….,argn]]---可选参数,用于指定要传递的参数列表
expression -----必选参数,用于指定实现具体功能的表达式
举例说明:
#使用lambda函数计算圆面积
r =10
area_circle = lambda r:math.pi*r*r
print("r 为10的圆面积为:{:.2f}".format(area_circle(r))) #注意带参数r
输出结果:
r 为10的圆面积为:314.16
举例2:
#按学生的总成绩排序
students_grade = [
{'id': '1001', 'name': '无语', 'english': 98, 'python': 100, 'c': 96},
{'id': '1002', 'name': '琦琦', 'english': 100, 'python': 96, 'c': 97},
{'id': '1003', 'name': '明日', 'english': 99, 'python': 97, 'c': 95},
{'id': '1004', 'name': '田珍', 'english': 93, 'python': 99, 'c': 98}
] # 保存学生成绩的列表
result_grade = students_grade.sort(key =lambda x:x['english']+x['python']+x['c'])
print("学生成绩排序后结果:")
for item in students_grade: #遍历打印
print(item)
输出结果参考:
今天先写学习到这里了,每天进步一点点。今天也要加油啊!