Python函数参数*args和**kwargs
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的更多相关文章
- Python可变参数*args和**kwargs
本文我们将通过示例了解 Python函数的可变参数*args和 **kwargs的用法. 知识预备:Python 函数和 Python 函数参数 在Python编程中,我们定义一个函数来生成执行类似操 ...
- Python函数中*args和**kwargs来传递变长参数的用法
参考自: http://www.jb51.net/article/78705.htm 单星号形式(*args)用来传递非命名键可变参数列表.双星号形式(**kwargs)用来传递键值可变参数列表. 1 ...
- Python中函数参数 *args 和 **kwargs
普通参数,即在调用函数时必须按照准确的顺序来进行参数传递. 默认参数,即参数含有默认值,在调用函数时可以进行参数传递,若没有进行参数传递则使用默认值,要注意,默认参数必须在普通参数的右侧(否则解释器无 ...
- python函数参数*args **kwargs
毕业多年,把C++都就饭吃了....今天居然在纠结什么是形参什么是实参..... 定义函数里面写的参数就是形参,因为没有内存占用,实际调用时写的参数就是实参,因为有内存占用和传值 然后就是位置参数,可 ...
- Python函数可变参数*args及**kwargs详解
初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kw ...
- 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)
详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类 Python中函数参数定义及调用函数时传参 ...
- 理解 Python 中的可变参数 *args 和 **kwargs:
默认参数: Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def getSum(x,y=5): print "x:", x print "y:& ...
- python可变参数*args, **kwargs
python可变参数*args, **kwargs def foo(* args, ** kwargs): print ' args = ', args print ' kwargs = ', k ...
- python函数参数的pack与unpack
python函数参数的pack与unpack 上周在使用django做开发的时候用到了mixin(关于mixin我还要写一个博客专门讨论一下,现在请参见这里),其中又涉及到了一个关于函数参数打包(pa ...
随机推荐
- Latex之希腊字母表 花体字母 实数集
花体字母 \mathcal{x} 实数集字母 \mathbb{R} 转自:http://blog.csdn.net/lanchunhui/article/details/49819445 拉丁字母是2 ...
- IoC是一个很大的概念,可以用不同的方式实现。其主要形式有两种:
IoC是一个很大的概念,可以用不同的方式实现.其主要形式有两种: ◇依赖查找:容器提供回调接口和上下文条件给组件.EJB和ApacheAvalon都使用这种方式.这样一来,组件就必须使用容器提供的AP ...
- java---servlet与filter的联系与区别
filter是一个可以复用的代码片段,可以用来转换HTTP请求.响应和头信息.Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应. 最近使用插 ...
- linux -- Ubuntu network-manager
[Server版本] 在UbuntuServer版本中,因为只存有命令行模式,所以要想进行网络参数设置,只能通过修改/etc/network/interfaces.具体设置方法如下: (1) Ubun ...
- 3% of users browse with IE9 and 14% of users have a disability. Why do we only cater for the former?
我想要用一个否定声明来開始我的文章:对于怎样创造一个易于用户体验的站点,我也不是了解非常多. 让作为一个资深开发人员的我操心的是,我在并没有获得太多关于这个主题(指怎样创造一个易于用户体验的站点)的实 ...
- bootstrap基础学习二篇
这篇学习网格系统(Grid System) Bootstrap 提供了一套响应式.移动设备优先的流式网格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. 1.网格选项: ...
- BestCoder Round #12 War(计算几何)
War Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- Gradle -- buildScript块与allprojects块及根级别的repositories区别
http://blog.sina.com.cn/s/blog_72ef7bea0102vvg3.html
- radio 标签状态改变时 触发事件
<html> <head> <script src="jquery1.7.2.js"></script> </head> ...
- JAVA基础之multipart,urlencoded以及JSON
一.(enctype) 表单的默认编码方式 ajpplication/x-www-form-urlencoded 上传文件的编码方式 multipart/form-data 互联网应用常用编码 ...