1. Python中使用*args和**kwargs

#!/usr/bin/env python3
# coding: utf-8
# File: args_kwargs_demo.py
# Author: lxw
# Date: 10/9/17 11:16 AM
"""
Demos for "*args" & "**kwargs" in Python.
Reference: [Python中如何使用*args和**kwargs](http://python.jobbole.com/83476/)
""" def func_args(*args):
print("type(args):{0}\targs:{1}\n".format(type(args), args)) def func_kwargs(**kwargs):
print("type(kwargs):{0}\tkwargs:{1}\n".format(type(kwargs), kwargs)) def func_args_kwargs(*args, **kwargs):
print("type(args):{0}\targs:{1}".format(type(args), args))
print("type(kwargs):{0}\tkwargs:{1}\n".format(type(kwargs), kwargs)) def func(arg1, arg2, arg3):
print("arg1:{0}\targ2:{1}\targ3:{2}".format(arg1, arg2, arg3)) def main():
# 函数定义
func_args_kwargs(1, 2, 3)
func_args_kwargs(1, a = 2, b = 3)
func_args_kwargs(a = 1, b = 2, c = 3) func_args(1, 2, 3)
# func_args(1, a = 2, b = 3) # TypeError: func_args() got an unexpected keyword argument 'a'
# func_args(a = 1, b = 2, c = 3) # TypeError # func_kwargs(1, 2, 3) # TypeError: func_kwargs() takes 0 positional arguments but 3 were given
# func_kwargs(1, a = 2, b = 3) # TypeError
func_kwargs(a = 1, b = 2, c = 3) print("---" * 10, "\n") # 函数调用
args = (1, "two", 3)
func(*args) args = [1, "two", 3]
func(*args)
del args[0]
print(args)
func("One", *args) args_dic = {"arg3": 3, "arg1": "", "arg2": "two"}
func(**args_dic)
del args_dic["arg1"]
print(args_dic)
func(1, **args_dic) if __name__ == '__main__':
main()
else:
print("Being imported as a module.") """
# Output:
type(args):<class 'tuple'> args:(1, 2, 3)
type(kwargs):<class 'dict'> kwargs:{} type(args):<class 'tuple'> args:(1,)
type(kwargs):<class 'dict'> kwargs:{'a': 2, 'b': 3} type(args):<class 'tuple'> args:()
type(kwargs):<class 'dict'> kwargs:{'a': 1, 'b': 2, 'c': 3} type(args):<class 'tuple'> args:(1, 2, 3) type(kwargs):<class 'dict'> kwargs:{'a': 1, 'b': 2, 'c': 3} ------------------------------ arg1:1 arg2:two arg3:3
arg1:1 arg2:two arg3:3
['two', 3]
arg1:One arg2:two arg3:3
arg1:1 arg2:two arg3:3
{'arg3': 3, 'arg2': 'two'}
arg1:1 arg2:two arg3:3
"""

Reference: Python中如何使用*args和**kwargs

2.  parameters with default values.

def func_default_value(a=1, b=2, c=3):
print("a:{0}\tb:{1}\tc:{2}".format(a, b, c)) def main():
# func_default_value(b=3, c=1, 2) # SyntaxError: positional argument follows keyword argumen
# func_default_value(a=2, 5, c=8) # SyntaxError: positional argument follows keyword argumen
func_default_value(2, 5, c=8) # OK
func_default_value("a", c=8) # OK
"""
# Output:
a: 2 b: 5 c:8
a: a b: 2 c:8
"""

Python函数参数*args和**kwargs的更多相关文章

  1. Python可变参数*args和**kwargs

    本文我们将通过示例了解 Python函数的可变参数*args和 **kwargs的用法. 知识预备:Python 函数和 Python 函数参数 在Python编程中,我们定义一个函数来生成执行类似操 ...

  2. Python函数中*args和**kwargs来传递变长参数的用法

    参考自: http://www.jb51.net/article/78705.htm 单星号形式(*args)用来传递非命名键可变参数列表.双星号形式(**kwargs)用来传递键值可变参数列表. 1 ...

  3. Python中函数参数 *args 和 **kwargs

    普通参数,即在调用函数时必须按照准确的顺序来进行参数传递. 默认参数,即参数含有默认值,在调用函数时可以进行参数传递,若没有进行参数传递则使用默认值,要注意,默认参数必须在普通参数的右侧(否则解释器无 ...

  4. python函数参数*args **kwargs

    毕业多年,把C++都就饭吃了....今天居然在纠结什么是形参什么是实参..... 定义函数里面写的参数就是形参,因为没有内存占用,实际调用时写的参数就是实参,因为有内存占用和传值 然后就是位置参数,可 ...

  5. Python函数可变参数*args及**kwargs详解

    初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kw ...

  6. 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)

    详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类   Python中函数参数定义及调用函数时传参 ...

  7. 理解 Python 中的可变参数 *args 和 **kwargs:

    默认参数:  Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def getSum(x,y=5): print "x:", x print "y:& ...

  8. python可变参数*args, **kwargs

    python可变参数*args, **kwargs def foo(* args, ** kwargs): print ' args = ',  args print ' kwargs = ',  k ...

  9. python函数参数的pack与unpack

    python函数参数的pack与unpack 上周在使用django做开发的时候用到了mixin(关于mixin我还要写一个博客专门讨论一下,现在请参见这里),其中又涉及到了一个关于函数参数打包(pa ...

随机推荐

  1. crc32 冗余加密校验

    在数据存储和传输中使用 在ts中要对pat  和pmt 中的数据进行冗余校验 http://blog.chinaunix.net/uid-20321537-id-1966721.html

  2. commit命令

    git commit -m "测试提交"

  3. exif_imagetype() 函数在linux下的php中不存在

    1.问题,项目中上传文件使用插件时,windows上支持函数exif_imagetype(),而在linux上不支持. 2.PHP exif_imagetype的本质 PHP exif_imagety ...

  4. 数据库为什么要用B+树结构--MySQL索引结构的实现(转)

    B+树在数据库中的应用 { 为什么使用B+树?言简意赅,就是因为: 1.文件很大,不可能全部存储在内存中,故要存储到磁盘上 2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/ ...

  5. 如何改变placeholder的样式

    input::-webkit-input-placeholder { color: #B2B2B2; } input:-moz-placeholder { color: #B2B2B2; } inpu ...

  6. iOS UIWebView 获取内容实际高度,关闭滚动效果

    本文转载至 http://my.oschina.net/Khiyuan/blog/341535   iOS UIWebView 获取内容实际高度,关闭滚动效果 近期做东西,将 UIWebView 嵌套 ...

  7. ASP.NET操作Excel(终极方法NPOI)

    ASP.NET操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,能够帮助开发者在没有安装微软Office的情况下读写Office 97-200 ...

  8. 【BZOJ1935/4822】[Shoi2007]Tree 园丁的烦恼/[Cqoi2017]老C的任务 树状数组

    题意:两道题差不多,都是给你一堆平面上的点,每个点有权值,然后m次询问求某一矩形区域内的点权和 题解:先离散化,然后将询问拆成左右两条线段,然后将点和这些线段一起按x坐标排序,在y轴上维护树状数组.然 ...

  9. 比较好用的Opera 翻译工具 ddict

    http://ddict.me

  10. Eclipse常用快捷键(转载)

    编辑相关快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户编辑的好帮手 ...