上一篇中我们在函数体中的写的都是打印语句,用print来输出打印结果。但是在实际使用的时候,我们并不需要将结果输出在控制台上。这时候该如何解决呢?
1. return返回值。
我们可以将函数的结果通过return返回出来。Let's have a try!
1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 # @Time :2018/11/27 14:40 4 # @Author :yosef 5 # @Email :wurz529@foxmail.com 6 # @File: :class17.py 7 # @Software :PyCharm Community Edition 8 def add(a,b): 9 return a+b 10 11 add(1,2)
发现这样控制台啥都没有,这是怎么回事呢?其实结果已经返回了,但是我们看不到,是因为没有用变量去接收这个结果。那我们用变量接收,再打印这个变量。
1 def add(a,b): 2 return a+b 3 4 result = add(1,2) 5 print(result)
这次可以看到结果出来了。
关于return,函数外部想获得函数结果,必须用return。return之后的语句都不会再执行,注意啊。
练习:
1 def make_album(singerName,album): 2 album_info={ 3 "name":singerName, 4 "album":album 5 } 6 return album_info 7 8 # album = make_album("刘德华","冰雨") 9 # print(album) 10 11 count = 0 12 while count<3: 13 name = input("请输入歌手名:") 14 album = input("请输入专辑名:") 15 result = make_album(name, album) 16 print(result) 17 count+=1
结果:
2. 动态参数
有的时候,需要往函数内部传递不一定数量的参数,此时,之前的函数就不太适用了。传入的参数其实是一个元组。无论传递多少个参数,都会把参数存储到一个元组里面。
def func(*args)
print(args)
func(1,2,3,4,5,6)
做一个简单的累乘,代码如下:
def result(*args): result=1 for i in args: result*=i return result a = result(5,6,9,5,3,6) print(a)
**kwargs:(表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现)。与*args相比,带有关键字且必须制定关键字,否则识别不了。通过**kwargs传入的是字典。*args传入的是元组。
1 def func(**kwargs): 2 print(kwargs) 3 4 func(a=1,b=2,c=3)
3. 位置参数,默认参数,动态参数以及关键字动态参数混合使用实例
1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 # @Time :2018/11/27 16:33 4 # @Author :yosef 5 # @Email :wurz529@foxmail.com 6 # @File: :class20.py 7 # @Software :PyCharm Community Edition 8 def func(a,b=2,c=3,*args,**kwargs): 9 result=0 10 sum=a+b+c 11 print(sum) 12 for item in args: 13 result+=item 14 print(result) 15 print("关键字动态参数是:",kwargs) # 不能用+连接,因为kwargs是字典 16 17 func(88,56,23,1,2,3,6,9,y="China",o="NB") # 这个a=88,b=56,c=23,args=(1,2,3,6),kwargs=["y":China,"o":"NB"]
习题:
1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 # @Time :2018/11/27 16:42 4 # @Author :yosef 5 # @Email :wurz529@foxmail.com 6 # @File: :class21.py 7 # @Software :PyCharm Community Edition 8 9 """ 10 case1 11 """ 12 # count=0 13 # def order(*args): 14 # print("顾客您好,您点了如下配菜:") 15 # for item in args: 16 # print(item, end=" ") 17 # print(" ") 18 # 19 # 20 # order("生菜", "面包", "热狗", "鸡腿") 21 # order("生菜","面包","热狗") 22 # order("生菜","面包") 23 24 """ 25 case2 26 """ 27 def make_car(maker,model,**kwargs): 28 print("您的爱车制造商是:"+maker) 29 print("您爱车的型号是:"+model) 30 for k,v in kwargs.items(): 31 print("您爱车的%s是%s" %(k, v)) 32 33 make_car('subaru','outback',color="blue",tow_package="True")