Day5 - 07 函数的参数-参数组合

现在我们学完了位置参数、默认参数、可变参数、关键字参数、命名关键字参数五种参数类型。
在Python中定义函数,可以使用这五种参数进行组合。
但是参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
            def f1(a, b, c=0, *pp, **kw):
                print(a,b,c,pp,kw)
            dd = [9,10,12,14,15,17,19,20]
            dk = {'q':99, 'p':88}
            f1(*dd,**dk)
            9 10 12 (14, 15, 17, 19, 20) {'q': 99, 'p': 88}
            def f2(a,b,c=0,*,job,hh):
                print(a,b,c,job,hh)
            dw = (1,2,3)
            ww ={'job':'jj','hh':'HH'}
            f2(*dw,**ww)
            1 2 3 jj HH
可以通过一个tuple和dict来调用函数。
            def f3(a,b,c,*pp,host,words,**kw):
                print(a,b,c,pp,host,words,kw)
            pp1 = (1,2,3,4,5,6,7,8,9,0)
            pp2 = {'host':'HH', 'words':'WW'}
            pp3 = {'oo':'oooo', 'ppp':'pppppp'}
            pp4 = {'host':'HH', 'words':'WW', 'oo':'oooo', 'ppp':'pppppp'}
            f3(*pp1,**pp2,**pp3)
            f3(*pp1,**pp4)
            1 2 3 (4, 5, 6, 7, 8, 9, 0) HH WW {'oo': 'oooo', 'ppp': 'pppppp'}
            1 2 3 (4, 5, 6, 7, 8, 9, 0) HH WW {'oo': 'oooo', 'ppp': 'pppppp'}
实际上,对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数时如何定义的。
虽然可以组合多达5中参数与, 但不要同时使用太多的组合,否则函数接口的可读性和可理解性都会非常差。

练习:
以下函数允许计算两个数的乘积,请稍加改造,变成可接收一个或多个数并计算乘积:
def product(x, y):
    return x * y
-------------------------------------
def pro(*x,y=1):
     s = 1
     for i in x:
             s = i * s
     print( s*y )
posted @ 2018-05-04 09:47  孔个个  阅读(158)  评论(0编辑  收藏  举报