Python中的参数

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

* test(arg1,arg2,`*args`)
* test(arg1,arg2,`*args`,`**kwargs`)

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

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

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

3. 什么是占位参数:

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

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

def test_var_args(f_arg, *argv):
print(type(argv))
# <class 'tuple'>
print("first normal arg:", f_arg)
for arg in argv:
print("another arg through *argv:", arg) test_var_args('yasoob', 'python', 'eggs', 'test')

4. 什么是键值对参数:

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

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

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

def test_kwarg(name, age, *args, **kwargs):
print('--------------------------------------')
print('all positional args:')
print('name:{0}'.format(name))
print('age:{0}'.format(age))
print('\n') print('all optional positional *args:')
for arg in args:
print('args:{0}'.format(arg)) print('\n')
print('all keywords **kwargs:')
for key, value in kwargs.items():
print("{0} == {1}".format(key, value)) # 只有占位参数
test_kwarg("foo", 26)
# 占位参数 + 可选占位参数
test_kwarg("foo", 26, 'opt1')
# 占位参数 + 键值对参数
test_kwarg("foo", 26, kw1=100, kw2=200)
# 占位参数 + 可选占位参数 + 键值对参数
test_kwarg("foo", 26, 'opt1', 'opt2', kw1=100, kw2=200) # --------------------------------------
# all positional args:
# name:
# foo
# age:
# 26 # all optional positional * args: # all keywords ** kwargs:
# --------------------------------------
# all positional args:
# name:
# foo
# age:
# 26 # all optional positional * args:
# args:
# opt1 # all keywords ** kwargs:
# --------------------------------------
# all positional args:
# name:
# foo
# age:
# 26 # all optional positional * args: # all keywords ** kwargs:
# kw1 == 100
# kw2 == 200
# --------------------------------------
# all positional args:
# name:
# foo
# age:
# 26 # all optional positional * args:
# args:
# opt1
# args:
# opt2 # all keywords ** kwargs:
# kw1 == 100
# 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. android调用系统相机并获取图片

    如果不是特别的要求,通过拍照的方式取得图片的话,我们一般调用系统的拍照来完成这项工作,而没必要再自己去实现一个拍照功能.调用系统相机很简单,只需要一个intent就可以跳转到相几界面,然后再通过onA ...

  2. sql如何做递归层次查询

    DROP FUNCTION IF EXISTS `WhlFucGetIDsOnID`; CREATE DEFINER = `root`@`127.0.0.1` FUNCTION `WhlFucGetI ...

  3. Vertica数据查询优化

    vertica是惠普公司推出的列式分布式数据库,在OLAP领域有其独到的地方,目前社区版免费,但是只能存放1T的数据.我在工作中维护的bi系统后端就是使用的vertica数据库,平时也经常需要对于数据 ...

  4. 使用 AForge.NET 做视频采集

    AForge.NET 是基于C#设计的,在计算机视觉和人工智能方向拥有很强大功能的框架.btw... it's an open source framework. 附上官网地址: http://www ...

  5. 『TCP/IP详解——卷一:协议』读书笔记——15

    2013-08-25 13:39:40 第6章 ICMP:Internet控制报文协议 6.1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息.ICMP报文同通常 ...

  6. (期望)A Dangerous Maze(Light OJ 1027)

    http://www.lightoj.com/volume_showproblem.php?problem=1027 You are in a maze; seeing n doors in fron ...

  7. Java SE、Java EE、Java ME

    Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.J ...

  8. U盘占空间,但看不到内容——解决方案

    原因: u盘感染了病毒 .病毒把U盘里的文件都加上了隐藏属性和系统属性,所以看不到了,但仍占用存储空间. 解决办法: 1.在“运行“里面输入:cmd,回车:2.在cmd中进入U盘.比如你的U盘是H盘, ...

  9. 分享一个漂亮的ASP.NET MVC界面框架

    本文分享一个插件化的界面框架,该框架提供了用户.角色.权限管理功能,也提供了插件的管理和插件中心.下图是该界面框架的样式(全部源码和原理介绍下一篇分享,推荐越多,源码放的越早,呵呵). 要使用该界面框 ...

  10. DownloadManager

    在androi中,volley适合小文件的获取和大并发,如果支持大文件的下载可以用Android原生的DownloadManager.DownloadManager默认支持多线程下载.断点续传等. 基 ...