Python中的参数

1. python函数参数有多重形式:

  1. * test(arg1,arg2,`*args`)
  2. * test(arg1,arg2,`*args`,`**kwargs`)

2. 其中比较糊弄人的是:*args**kwargs

*args 变长的占位参数列表 - <class 'tuple'>

**kwargs 变长的键值对参数列表 - <class 'dict'>

3. 什么是占位参数:

test(arg1,arg2) 参数括弧中列出的标识符就是占位参数

*args变长占位参数是用来发送一个非键值对的可变数量的参数列表给一个函数, 可以遍历得到它

  1. def test_var_args(f_arg, *argv):
  2. print(type(argv))
  3. # <class 'tuple'>
  4. print("first normal arg:", f_arg)
  5. for arg in argv:
  6. print("another arg through *argv:", arg)
  7. test_var_args('yasoob', 'python', 'eggs', 'test')

4. 什么是键值对参数:

**kwargs 允许你将变长度的键值对, 作为参数传递给一个函数, 说白了就是函数的参数是个dict,但是不能直接传个dict给函数,得加上前导**解包

  1. def test_kwarg(**kwargs):
  2. print(type(kwargs))
  3. # <class 'dict'>
  4. for key, value in kwargs.items():
  5. print("{0} == {1}".format(key, value))
  6. test_kwarg(name="foo")
  7. test_kwarg(name="foo", age=26)
  8. test_kwarg(**{'name': "foo", 'age': '26'})

5. 综合看一个更复杂的例子

  1. def test_kwarg(name, age, *args, **kwargs):
  2. print('--------------------------------------')
  3. print('all positional args:')
  4. print('name:{0}'.format(name))
  5. print('age:{0}'.format(age))
  6. print('\n')
  7. print('all optional positional *args:')
  8. for arg in args:
  9. print('args:{0}'.format(arg))
  10. print('\n')
  11. print('all keywords **kwargs:')
  12. for key, value in kwargs.items():
  13. print("{0} == {1}".format(key, value))
  14. # 只有占位参数
  15. test_kwarg("foo", 26)
  16. # 占位参数 + 可选占位参数
  17. test_kwarg("foo", 26, 'opt1')
  18. # 占位参数 + 键值对参数
  19. test_kwarg("foo", 26, kw1=100, kw2=200)
  20. # 占位参数 + 可选占位参数 + 键值对参数
  21. test_kwarg("foo", 26, 'opt1', 'opt2', kw1=100, kw2=200)
  22. # --------------------------------------
  23. # all positional args:
  24. # name:
  25. # foo
  26. # age:
  27. # 26
  28. # all optional positional * args:
  29. # all keywords ** kwargs:
  30. # --------------------------------------
  31. # all positional args:
  32. # name:
  33. # foo
  34. # age:
  35. # 26
  36. # all optional positional * args:
  37. # args:
  38. # opt1
  39. # all keywords ** kwargs:
  40. # --------------------------------------
  41. # all positional args:
  42. # name:
  43. # foo
  44. # age:
  45. # 26
  46. # all optional positional * args:
  47. # all keywords ** kwargs:
  48. # kw1 == 100
  49. # kw2 == 200
  50. # --------------------------------------
  51. # all positional args:
  52. # name:
  53. # foo
  54. # age:
  55. # 26
  56. # all optional positional * args:
  57. # args:
  58. # opt1
  59. # args:
  60. # opt2
  61. # all keywords ** kwargs:
  62. # kw1 == 100
  63. # kw2 == 200

6. Note: 函数调用时,*args, **kwargs是可选的,但是前面的常规参数是必须的

7. over

Python中的参数的更多相关文章

  1. 从 python 中 axis 参数直觉解释 到 CNN 中 BatchNorm 的工作方式(Keras代码示意)

    1. python 中 axis 参数直觉解释 网络上的解释很多,有的还带图带箭头.但在高维下是画不出什么箭头的.这里阐述了 axis 参数最简洁的解释. 假设我们有矩阵a, 它的shape是(4, ...

  2. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

  3. python中函数参数的引用方式

    值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...

  4. python中的参数问题

    python中的有默认参数和可变参数之分 默认参数arg 可变参数args, kargs 默认参数arg就是调用指定参数 可变参数*arg调用时传入的的参数会被python自动包装为列表 可变参数ka ...

  5. (转)python中的参数:*args和**kwargs

    def foo(*args, **kwargs):print 'args = ', argsprint 'kwargs = ', kwargsprint '---------------------- ...

  6. python中函数参数*args和**kw的区别

    1.函数与参数(实参) 在python中创建函数是def,创建函数名是def f(),f函数名字,def f(a,b),这里的a,b是两个参数,函数名是自定义的,参数也是自定义,随意就好.看图如下效果 ...

  7. Python中函数参数类型和参数绑定

    参数类型 Python函数的参数类型一共有五种,分别是: POSITIONAL_OR_KEYWORD(位置参数或关键字参数) VAR_POSITIONAL(可变参数) KEYWORD_ONLY(关键字 ...

  8. 对Python中函数参数类型及排序问题,三个方面的总结

    Python中函数的参数问题有点复杂,主要是因为参数类型问题导致的情况比较多,下面来分析一下. 参数类型:缺省参数,关键字参数,不定长位置参数,不定长关键字参数. 其实总共可以分为 位置参数和关键字参 ...

  9. python中函数参数

    默认参数注意点 优点:灵活,当没有指定与形参对应的实参时就会使用默认参数 缺陷: 例子: >>> def h(m, l=[]):                    #默认参数时列 ...

随机推荐

  1. DeliciousRetouch加强中文版v3.0-支持CS6--C鲁中C 2015.5 影楼磨破插件

    支持PS CC至最新版CC 2015.5下载地址: [点击下载] 支持系统Win/Mac 画像修版"美味修整3"扩展Photoshop 您需要使用的所有工具DR3扩展,这里的顶部面 ...

  2. Sublime+Golang Plugin

    很喜欢在Sublime开发Golang程序,主要是要一个Sublime Golang Plugin, 可以给代码autocomplement.相当的棒! 1.安装Sublime https://www ...

  3. React Native填坑之旅--组件生命周期

    这次我们来填React Native生命周期的坑.这一点非常重要,需要有一个清晰的认识.如果你了解Android或者iOS的话,你会非常熟悉我们今天要说的的内容. 基本上一个React Native的 ...

  4. [UCSD白板题] Fractional Knapsack

    Problem Introduction Given a set of items and total capacity of a knapsack,find the maximal value of ...

  5. 重编译Linux命令源代码

    转: http://blog.csdn.net/endoresu/article/details/6967435 以su命令为例. 查看su命令的路径: # which su /bin/su 查看su ...

  6. bdb log file 预设长度的性能优化

    看代码随手记:log_put.c, __log_write() /* * If we're writing the first block in a log file on a filesystem ...

  7. Web测试基础点

    摘自:软件工程师成长之路 1.获取当前使用的Flash播放器版本(Flash Player Version)信息 在浏览器地址栏输入http://www.playerversion.com/,即可显示

  8. List<String[]>

    1.List<Sttring[]>的用法 List<String[]> list = new ArrayList<String[]>();//声明一个List< ...

  9. Pip Permittion Issue on MacOS

    Question: OSError: [Errno 1] Operation not permitted: '/tmp/pip-W13DsU-uninstall/System/Library/Fram ...

  10. redmine中创建项目与跟踪标签(原创)

    今天来说下本公司所用到的项目管理工具redmine,总体来说还是比较好用的.redmine中可以记录项目的整个过程,可创建跟踪标签(里程碑.需求用例.功能.任务.缺陷)来进行对项目的管控.跟踪标签根据 ...