python--*args和**kwargs可变参数
2024-09-02 23:39:53
先来看个例子:
#! /usr/bin/env python
#coding=utf-8 def foo(*args, **kwargs):
print('args=',args)
print('kwargs=',kwargs)
print('----------------------------') if __name__ == '__main__':
foo(1,2,3,4)
foo(a=1,b=2,c=3)
foo(1,2,3,4,a=1,b=2,c=3)
foo('a',1,None,a=1,b='',c=3)
结果:
args= (1, 2, 3, 4)
kwargs= {}
--------------------------------------
args= ()
kwargs= {'b': 2, 'c': 3, 'a': 1}
--------------------------------------
args= (1, 2, 3, 4)
kwargs= {'b': 2, 'c': 3, 'a': 1}
--------------------------------------
args= ('a', 1, None)
kwargs= {'b': '2', 'c': 3, 'a': 1}
--------------------------------------
可以看到,这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。
还有一个很漂亮的用法,就是创建字典:
def kw_dict(**kwargs):
return kwargs
print(kw_dict(a=1,b=2,c=3) == {'a':1,'b':2,'c':3})
其实python中就带有dict类,使用dict(a=1,b=2,c=3)即可创建一个字典了。
最新文章
- 用scikit-learn学习DBSCAN聚类
- WCF、Web API、WCF REST、Web Service比较
- php入门一ubuntu16.04中php环境配置及一个网页
- ENode框架Conference案例分析系列之 - 上下文划分和领域建模
- 11、ASP.NET MVC入门到精通——AspnetMVC分页
- Tomcat Manager用户配置详解
- Hello又大了一岁
- vsftp 详解鸟哥版
- 数据库设计的误区—>;CHAR与VARCHAR
- 在项目中创建单元测试时junit的配置和使用
- 系统引导修复 ---- Windows 和 Ubuntu
- Ubuntu 16.04 安装 Docker
- 南邮 base64全家桶
- Python之socket_udp
- python 文件重命名
- Android sdk下载找不到support library
- 【tools】vim删除命令
- 内存占用过高 kill 调整mysql内存占用
- LeetCode 5回文数
- R语言列表list函数
热门文章
- 016-Hadoop Hive sql语法详解6-job输入输出优化、数据剪裁、减少job数、动态分区
- 【转载】Java中使用Jedis操作Redis
- Kafka配置参数说明
- corethink功能模块探索开发(六)让这个模块在前台显示
- Python基础(14)_python模块之configparser模块、suprocess
- 系统非正常关机启动后出现:an error occurred during the file system
- $Android自定义控件风格的方法
- oracle 定时删除3天前的备份数据
- spring data jpa是什么?
- 一个由自增运算符以及C语法顺序细节引起的bug