一、返回值

#使用return语句输出返回值,语法为return(value),可以返回一个值,也可以返回多个值
#例:某商场打折促销活动,金额500~1000打九折,1000~2000打八折,2000~3000打七折,高于3000打六折
def f1(money):
    '''功能:计算商品金额并计算折扣结果
       money:保存商品金额列表
       返回值:商品的合计金额和折扣后的金额
    '''
    moneyold = sum(money)#计算合计金额
    moneynew = moneyold  
    if 500 <= moneyold < 1000:  #享受9折优惠
        moneynew = '{:.2f}'.format(moneyold*0.9)
    elif 1000 <= moneyold < 2000:  #享受8折优惠
        moneynew = '{:.2f}'.format(moneyold*0.8)
    elif 2000 <= moneyold < 3000:  #享受7折优惠
        moneynew = '{:.2f}'.format(moneyold*0.7)
    elif moneyold >= 3000:  #享受6折优惠
        moneynew = '{:.2f}'.format(moneyold*0.6)
    return moneyold,moneynew   #返回总金额和折扣后的金额
#调用函数
print("\n开始结算====\n")
listmoney = []
while True :
    inmoney = float(input("请输入商品金额(输入0表示输入完毕):"))
    if int(inmoney) == 0:
        break   #退出循环
    else :
        listmoney.append(inmoney)
        money = f1(listmoney)#调用函数
print("合计金额:",money[0],"应付金额:",money[1])
开始结算====

请输入商品金额(输入0表示输入完毕):465
请输入商品金额(输入0表示输入完毕):789
请输入商品金额(输入0表示输入完毕):1598
请输入商品金额(输入0表示输入完毕):2689
请输入商品金额(输入0表示输入完毕):4367
请输入商品金额(输入0表示输入完毕):0
合计金额: 9908.0 应付金额: 5944.80

二、变量的作用域

#指代码能够访问的区域,超出范围,将不能访问,根据作用范围,分为局部变量和全局变量,函数体内的一般为局部变量,也可以定义成全局变量
def f2():
    a1 = "人生得意须尽欢,莫使金樽空对月!"  #定义局部变量a1
    print("局部变量a1=",a1) #输出局部变量的值           #函数体内可以正常输出结果
f2() #调用函数
print("局部变量a1=",a1)  #函数体外输出局部变量的值     #输出结果报错,a1没有定义#
局部变量a1= 人生得意须尽欢,莫使金樽空对月!



---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-5-c7bf3660092f> in <module>()
      4     print("局部变量a1=",a1) #输出局部变量的值
      5 f2() #调用函数
----> 6 print("局部变量a1=",a1)  #函数体外输出局部变量的值


NameError: name 'a1' is not defined
# 全局变量,既能在函数体内作用,也能在函数体外作用
a2 = "烟笼寒水月笼沙,夜泊秦淮近酒家!"   #函数体外,全局变量
def f3():
    a2 = "人生得意须尽欢,莫使金樽空对月!"  #定义局部变量a2
    print("局部变量a2=",a2) #输出局部变量的值           #函数体内可以正常输出结果
f3() #调用函数
print("全局变量a2=",a2)  #函数体外输出全局变量的值     #输出结果a2
局部变量a2= 人生得意须尽欢,莫使金樽空对月!
全局变量a2= 烟笼寒水月笼沙,夜泊秦淮近酒家!
#在函数体内定义全部变量,global定义全局变量
a3 = "烟笼寒水月笼沙,夜泊秦淮近酒家!"   #函数体外,全局变量
def f4():
    global a3   #定义全局变量
    a3 = "人生得意须尽欢,莫使金樽空对月!"  #赋值全局变量a3
    print("全局变量a3=",a3) #输出全局变量的值           
f4() #调用函数
print("全局变量a3=",a3)  #函数体外输出全局变量的值
全局变量a3= 人生得意须尽欢,莫使金樽空对月!
全局变量a3= 人生得意须尽欢,莫使金樽空对月!
#例 一棵松树做梦变成圣诞树,梦醒后,身上披满雪花,仍是一颗松树
pinetree = "我是一颗高傲的松树!"  #定义全局变量
def f5():
    pinetree = "挂上彩灯,穿上红白棉袄,戴上圣诞帽,我变成圣诞树啦!@^^@"   #定义局部变量
    print(pinetree)  #打印局部变量
#函数体外
print("\n下雪啦…………\n")
print("="*15,"开始做梦!","="*15)
f5()  #调用函数
print("="*15,"梦醒了!","="*15)
pinetree = "我身上披满雪花" + pinetree +"-_-"   #为全局变量赋值
print(pinetree)#输出
下雪啦…………

=============== 开始做梦! ===============
挂上彩灯,穿上红白棉袄,戴上圣诞帽,我变成圣诞树啦!@^^@
=============== 梦醒了! ===============
我身上披满雪花我是一颗高傲的松树!-_-

三、匿名函数

# 匿名函数相当于电影中的群众演员,往往只用一次,不需命名
#例,计算圆的面积函数
import math
def f6(r):
    return math.pi*r*r   #圆的面积公式
r = 100 
print("半径为",r ,"的圆的面积为:",f6(r))
半径为 100 的圆的面积为: 31415.926535897932
#也可以不用定义新函数来计算,用lambda计算,语法为 s = lambda[arg1,[,arg2,...argn]]:expression
r1 = 100
s = lambda r1:math.pi*r1*r1   #用lambda 关键词表示
print(s(r1))
31415.926535897932
#例 图书打折活动,按金额和折扣排序
book = [("平凡的世界",22.5,120),("零基础学Python",55,95),("不生病的智慧",22.5,36),("经济学原理",50,128)]  #商品列表
print("商品信息\n",book,"\n")
book.sort(key = lambda x : (x[1],x[1]/x[2]))    #排序规则
print("排序后的商品信息\n",book,"\n")
商品信息
 [('平凡的世界', 22.5, 120), ('零基础学Python', 55, 95), ('不生病的智慧', 22.5, 36), ('经济学原理', 50, 128)] 

排序后的商品信息
 [('平凡的世界', 22.5, 120), ('不生病的智慧', 22.5, 36), ('经济学原理', 50, 128), ('零基础学Python', 55, 95)]
#例 用函数法计算半径分别为 5,6,7,8,9,10的圆的周长
import math
def f7(r):
    return math.pi*2*r   #圆的周长公式
list7 = [5,6,7,8,9,10]
for r in list7 :
    print("半径为",r ,"的圆的周长为:",f7(r))
半径为 5 的圆的周长为: 31.41592653589793
半径为 6 的圆的周长为: 37.69911184307752
半径为 7 的圆的周长为: 43.982297150257104
半径为 8 的圆的周长为: 50.26548245743669
半径为 9 的圆的周长为: 56.548667764616276
半径为 10 的圆的周长为: 62.83185307179586