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. 自动挂载文件/etc/fstab功能详解

    今天看了这篇文章,对于自动挂载中的一些小细节和参数有了更深的理解,所以这次把它摘下来,留做查询 一./etc/fstab文件的作用 1.我们把磁盘手动挂载之后如果不把它写入/etc/fstab这个文件 ...

  2. 自话自说——POI使用需要注意一个地方

    2015.12.1  天气 不怎么好   心情跟天气一样.知道为什么吗,因为昨晚一晚没睡你懂吗... 今天在用POI操作excel的时候,遇到了一个很恶心的地方,这个地方真的有那种让我不相信编程的感觉 ...

  3. 黑马程序员-c语言-类型强制转换

    强制转换的条件: 1.当所声明的类型不能满足所符值的变量时,需要转换声明的类型,以便能够存储变量. 例如:short存储的最大值为32767,但是所要符值大于32767时,short类型不符合,需要转 ...

  4. PSP&进度条

    11号 类别 开始时间 结束时间 间隔 净时间 燃尽图 8::00 8:20 0 20分钟 站立会议 8:20 8:50 0 30分钟 读构建之法 9:20 13:20 120分钟 120分钟 四人小 ...

  5. linux下subversion server安装手册

    linux下subversion server安装手册 安装基于的Linux版本为:Red Hat Enterprise Linux Server release 6.3. 一 准备需要的安装包. ( ...

  6. XAF Spreadsheet property Editor

    https://www.devexpress.com/Support/Center/Question/Details/T371232

  7. NSString进行urlencode编码

    今天在项目开发过程中,需要给webView传一个url,但是web端需要我将url中的一个变量进行urlencoding编码.这个主要原因是怕这个参数中存在一些转义字符,ok!这个没有问题,一开始我只 ...

  8. wireshark常用过滤规则

    wireshark常用过滤规则:(Filter中输入过滤规则)1.源ip过滤:ip.src==1.1.1.1               (过滤源ip为1.1.1.1的包) 2.目的ip过滤:ip.d ...

  9. 源代码版本管理与项目管理软件的认识与github的注册

    源代码版本管理软件: 主要有:svn,cvs,hg,git,VSS 这些工具主要是一种记录代码更改历史, 可以无限回溯, 用于代码管理,多个程序员开发协作的工具.Perforce,StarTeam)- ...

  10. JavaScript函数柯里化

    函数式 JavaScript是以函数为一等公民的函数式语言.函数在JavaScript中也是一个对象(继承制Function),函数也可以作为参数传递成函数变量.最近几年函数式也因为其无副作用的特性. ...