现在我们学完了位置参数、默认参数、可变参数、关键字参数、命名关键字参数五种参数类型。
在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 )

最新文章

  1. basic use of sidekiq (2)
  2. [UOJ30/Codeforces Round #278 E]Tourists
  3. jQuery选择器方式-用的不多的name选择器
  4. GNU风格 汇编语法总结(转)
  5. 毕业论文endnote使用
  6. WTL安装
  7. Java Object 对象创建的方式 [ 转载 ]
  8. FT View SE联合Studio 5000仿真
  9. SVM原理 (转载)
  10. APP研发录笔记
  11. myeclipse编写servlet
  12. 懒人小工具:T4生成实体类Model,Insert,Select,Delete以及导出Excel的方法
  13. 斯坦福CS231n学习--初识
  14. LeetCode--429--N叉树的层序遍历
  15. 洛谷 P4568 [JLOI2011]飞行路线 解题报告
  16. ASP输出JSON数据及客户端jQuery处理方法
  17. cron,at的权限控制
  18. linq的语法和案例
  19. Android intel X86 图像渲染
  20. 尚学堂的一个用了ExtJs的页面代码

热门文章

  1. SQL Server 批量生成数据库内多个表的表结构
  2. 关于重写equals同时重写hashcode
  3. linux打包 压缩 解压tar常归操作
  4. C/C++编程日记:逻辑井字棋(圈叉)(用空格初始化)
  5. 使用大乌龟git和码云搭建版本库
  6. 关于Redis的一些思考
  7. prometheus监控实战--基础
  8. web自动化测试--iframe切换
  9. CSP.2020
  10. 【对不起】我并不是真的会用spring