python之动态参数 *args,**kwargs(聚合,打散)
一、函数的动态参数 *args,**kwargs, 形参的顺序
1、你的函数,为了拓展,对于传入的实参数量应该是不固定,
所以就需要用到万能参数,动态参数,*args, **kwargs
1,*args 将所有实参的位置参数聚合到一个元组,并将这个元组赋值给args
(起作用的是* 并不是args,但是约定俗成动态接收实参的所有位置参数就用args)
def sum1(*args):
print(args)
sum1(1,2,['hello']) #是一个元组(1, 2, ['hello'])
2,**kwargs 将所有实参的关键字参数聚合到一个字典,并将这个字典赋值给kwargs
(起作用的是** 并不是kwargs,但是约定俗成动态接收实参的所有关键字参数就用kwargs)
def fun(*args,**kwargs):
print(args)
print(kwargs)
fun(1,2,['a','b'],name='xiaobai',age=18)
# 结果:
# (1, 2, ['a', 'b']) #位置参数,元组
# {'name': 'xiaobai', 'age': 18} #关键字参数,字典
2、*的用法
在函数的定义时,*位置参数,**关键字参数--->聚合。
在函数的调用(执行)时,*位置参数,**关键字参数--->打散。
实参--->*位置参数--->把位置参数打散成最小的元素,然后一个个添加到args里组成一个元组
l1 = [1,2,3]
l2 = [111,22,33,'xiaobai']
#如果要将l1,l2通过函数整合到一起
# 方法一(实参不用*):
def func1(*args):
return args[0] + args[1]
print(func1(l1,l2)) #[1, 2, 3, 111, 22, 33, 'xiaobai'] # 方法二(实参用*):
def func1(*args):
return args
print(func1(*l1,*l2)) #(1, 2, 3, 111, 22, 33, 'xiaobai')
实参--->**关键字参数--->把关键字参数打散成最小的元素,然后一个个添加到kwargs里组成一个字典
def func1(**kwargs):
print(kwargs) #func1(name='xiaobai',age=18,job=None,hobby='girl')
func1(**{'name':'xiaobai','age':18},**{'job':None,'hobby':'girl'}) # 结果:
# {'name': 'xiaobai', 'age': 18, 'job': None, 'hobby': 'girl'}
3、形参的顺序(a--->b,代表的顺序是写参数时,要先写a再写b)
位置参数--->默认参数
def func(a,b,sex='男'):
print(sex)
func(100,200)
位置参数--->*args--->默认参数
def func(a,b,*args,sex='男'):
print(a,b)
print(args)
print(sex)
func(100,200,1,2,34,5,'女',6)
# 结果:
# 100 200 #a,b
# (1, 2, 34, 5,'女',6) #args
# 男 #默认参数
位置参数--->*args--->默认参数--->**kwargs
def func(a,b,*args,sex='男',**kwargs):
print(a,b)
print(args)
print(sex)
print(kwargs)
func(100,200,1,2,34,5,6,sex='女',name='xiaobai',age=1000)
func(100,200,1,2,34,5,6,name='xiaobai',age=1000,sex='女')
# 两个的结果都是:
# 100 200 #a,b
# (1, 2, 34, 5, 6) #args
# 女 #默认参数修改后的值
# {'name': 'xiaobai', 'age': 1000} #kwargs # 若是形参这样写:
def func(a,b,*args,**kwargs,sex='男'):
print(a,b)
print(args)
print(sex)
print(kwargs)
func(100,200,1,2,34,5,6,name='xiaobai',age=1000,sex='女')
# 结果:会报错,默认参数一定要写在kwargs前面
python之动态参数 *args,**kwargs(聚合,打散)的更多相关文章
- python之动态参数 *args,**kwargs(聚合,打散--转载
转自https://www.cnblogs.com/ellisonzhang/p/10243122.html 一.函数的动态参数 *args,**kwargs, 形参的顺序 1.你的函数,为了拓展,对 ...
- python之动态参数 *args,**kwargs和命名空间
一.函数的动态参数 *args,**kwargs, 形参的顺序1.你的函数,为了拓展,对于传入的实参数量应该是不固定,所以就需要用到万能参数,动态参数,*args, **kwargs 1,*args ...
- 动态参数(*args,**kwargs),命名空间和作用域,global和nonlocal,函数的嵌套
1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上*聚合, **聚合 在实参上*打散, **打散 ...
- 函数动态参数 *args **kwargs
def f1(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs))li = [11,22,33]dic = {'k1': ...
- python:动态参数*args
动态参数 顾名思义,动态参数就是传入的参数的个数是动态的,可以是1个.2个到任意个,还可以是0个.在不需要的时候,你完全可以忽略动态函数,不用给它传递任何值. Python的动态参数有两种,分别是*a ...
- Python函数可变参数*args及**kwargs详解
初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kw ...
- python可变参数*args, **kwargs
python可变参数*args, **kwargs def foo(* args, ** kwargs): print ' args = ', args print ' kwargs = ', k ...
- python 函数动态参数,名称空间,global,nonlocal
##################################总结######################################动态参数 *args:位置参数动态传参,接收到的是元 ...
- python函数动态参数详解
Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组. def func (*args): print(args) func(123,1,2,'a') ...
随机推荐
- pycharm 虚拟环境virtualenv迁移到别的机器 无法读取包的问题
将virtualenv迁移到别的机器时,发现pycharm 总是无法读取目录下所在的包,后来经过实验终于找到了问题所在: 将自己所建的虚拟环境目录下的orig-prefix.txt中保存的路径,改成新 ...
- Ubuntu下修改权限时出现"unable to execute /bin/chmod: Argument list too long"
Ubuntu14.04下修改权限时出现"unable to execute /bin/chmod: Argument list too long" ,大概意思是卧槽,你这参数也 ...
- [已读]悟透JavaScript
这本书出的特别早,就第一部分内容还行,第一次看得时候觉得蛮有意思,讲禅的方式来讲javascript,作者造了一个"甘露模型"来实现继承,不过今天整理的时候,发现那些笔记都没多少可 ...
- 如何写一个跨浏览器的事件处理程序 js
如何 写一个合格的事件处理程序,看如下代码: EventUtil可以直接拿去用 不谢 <!DOCTYPE html> <html> <head> <title ...
- 用vue.js重构订单计算页面
在很久很久以前做过一个很糟糕的订单结算页面,虽然里面各区域(收货地址)使用模块化加载,但是偶尔会遇到某个模块加载失败的问题导致订单提交的数据有误. 大致问题如下: 1. 每个模块都采用usercont ...
- 在腾讯云centOs系统上安装nginx
1.安装nginx 下载:wget http://nginx.org/download/nginx-1.8.1.tar.gz 解压:tar -zxvf nginx-1.8.1.tar.gz 安装编译源 ...
- chrome浏览器好用的一些插件
1. Listen 1(听音乐) 2. The Great Suspender(定时释放chrome 打开的页面内存) 3. Similar Web(页面流量分析) 4. Advertising Te ...
- kafka-->storm-->mongodb
目的: 通过Spout发射kafka的数据,到bolt统计每一个单词的个数,将这些记录更新到mongodb中. Spout的nextTuple方法会一直处于一个while循环这中,每一条数据发送给bo ...
- hihocoder1032 最长回文子串
思路: manacher模板. 实现: #include <iostream> #include <cstring> using namespace std; ]; strin ...
- jQuery选择器之样式
.attr()与.removeAttr() 每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息.如:在img元素中,src就是元素的特性,用来标记图片的地址. 操作特性的 ...