python args kw_Python基础-参数魔法,*args,**kwags
最近在带着新成员一起学习《Python基础教程》这本书,看到参数魔法的时候
突然感觉好多术语真的不知道呀~
Python参数:位置参数,关键字参数
经常看Python我们肯定经常看见,下面类似这样的代码
def add(x,y):
return x+y
# 1
add(1,2)
# 2
add(x=1,y=2)
上面的两段代码结果是一样,但是含义却不一样
第一种叫做位置参数:即,add函数根据调用时参数传进来时候的位置来确定谁是x,谁是y
第二种叫做关键字参数:即,add函数根据调用时指定的参数对应值来确定x,y;这时也可以写成add(y=2,x=1)
两种方法各有自己的用途
Python收集参数
我们都应该知道在Python3(2不支持)在解压可迭代对象是有星号表达式
进行多个元素的不确定解包
然后收集参数是什么呢?如名字所示,就是当参数个数不定时,我们函数的定义,类似收集的方式,满足不定长参数需求
这里就也用到了星号*,不过星号表达式在解压可迭代对象时生成的是个列表,收集参数则要看星号的数量来决定类型
下段代码运行所示:
_, *b, _ = ["hello", "world", "test", "ddd"]
print(b)
def test(*parameter1, **parameter2):
print('parameter1=', parameter1)
print('parameter2=', parameter2)
test("hello", "world", fo="a", ss="b")
如图片所示,
收集参数中使用一个星号,即“*”,会对调用时导入的位置参数进行‘收集’转为元祖
收集参数中使用两个星号,即“**”,会对调用时导入的关键字参数进行“收集”转换为字典
此时你可能已经联想到了经常遇到的 args,*kwargs,后面会提到
“收集参数“反转
上面提到了收集参数,针对函数定义在参数位置利用*来进行不定参数的收集
同时,我们也可以利用类似的‘逆运算’,进行代码编写
如下面代码:
test1 = ("hello", "world")
def test(parameter1, parameter2):
print("1.", parameter1,)
print("2.", parameter2)
test(*test1)
args,*kwargs
如上面收集参数所示,在Python中只是习惯默认定义args为位置参数收集参数
*kwargs为关键字参数收集参数
他们之间的区别也如上所示,我们什么时候会用到他们呢?
子类化
class Foo(object):
def __init__(self, value1, value2):
# do something with the values
print value1, value2
class MyFoo(Foo):
def __init__(self, *args, **kwargs):
# do something else, don't care about the args
print 'myfoo'
super(MyFoo, self).__init__(*args, **kwargs)
装饰器
def mydecorator( f ):
@functools.wraps( f )
def wrapper( *args, **kwargs ):
print "Calling f", args, kwargs
v = f( *args, **kwargs )
print "f returned", v
return v
return wrapper
PS:
注意收集参数顺序,位置参数必须在关键字参数之前
也就是说,args和**kwargs同时出现时,args必须位于前面
python args kw_Python基础-参数魔法,*args,**kwags相关推荐
- python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...
Python内置了很多函数,可以直接调用.Python内置的函数可以通过官方文档查看.也可以通过help()查看帮助信息.函数名是指向函数对象的引用,把函数名赋给变量,相当于给函数起了别名. 1. 定 ...
- python魔法参数_python中的魔法参数:*args和**kwargs
def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '------------------- ...
- python中的魔法参数:*args和**kwargs
def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '------------------- ...
- (转)python中的参数:*args和**kwargs
def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '------------------- ...
- python计算传入数字参数的和_Python基础_6
函数 刘吖星 2019/10/15 什么是函数 我们都知道圆的面积计算公式是 $S = πR^2$ 所以当我们知道圆的半径 R 的时候,就可以根据公式计算出圆的面积.现在假设我们需要计算三个不同大小的 ...
- python怎么理解函数的参数_理解Python中函数的参数
定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解 ...
- python干货_python 基础干货 02
list 与 tuple list 类似 数组 tuple 跟 list 一样, 只是一旦定义, 里边的内容不可以改变. 这样, 上边的内容就不可以改变了. "可变的" tuple ...
- python函数可以按照参数名称方式传递参数_python函数传入参数(默认参数、可变长度参数、关键字参数)...
1.python中默认缺省参数----定义默认参数要牢记一点:默认参数必须指向不变对象! 1 def foo(a,b=1):2 printa,b3 4 foo(2) #2 1 5 foo(3,100) ...
- python中函数包括参数函数吗_Python中的函数---函数的定义和参数
本文是廖雪峰教程的笔记. 函数的定义 定义函数时,需要确定函数名和参数个数 def fun(x1,x2,x3):: 如果有必要,可以先对参数的数据类型做检查: 函数体内部可以用return随时返回函数 ...
最新文章
- python opencv 图像膨胀
- kerberos简单介绍
- 洛谷 P3391 文艺平衡树
- 这算不算职场PUA?
- 架构师必读!以图文的方式解锁 HTTPS原理,10分钟还原HTTPS真像!
- webpack路径问题总结
- MYSQL中日期与字符串间的相互转换
- web和python哪个好_用python开发app和web哪个比较容易?
- mysql 锁表 for update,MySQL中select * for update锁表的问题(转)
- Python教程:while 循环用法讲解
- 2021年N1叉车司机找解析及N1叉车司机试题及解析
- JavaScript函数-创建参数个数不限数量的函数
- Java中introduce方法,Introduce Foreign Method (引入外加函数)
- 音频信号输入itc服务器,音频信号的两种传输方式,你知多少?
- 【珍藏版】⼤数据中台架构及解决⽅案
- NLP-D32-毕设答辩准备-《人类语言处理》03-04
- 网络运维与管理2013超值精华本
- 搜狗日志Hive数据分析
- 婚礼的正确打开方式:“电子+纸质”请柬,让婚礼更出彩
- POJ-2438 哈密顿环 哈密瓜很甜
热门文章
- 7价 半导体掺杂_掺杂工艺(一)
- 【OpenCV 例程200篇】27. 图像的旋转(以任意点为中心)
- mysql have_mysql having的用法
- ipv6的127位掩码如何表示_子网掩码为255.255.255.0代表的意思是什么?
- 深入浅出理解HOG特征---梯度方向直方图
- 职称计算机考试有哪些题,职称计算机考试判断复习题「有答案」
- 傲云浏览器linux,Centos7安装部署zabbix监控软件
- 【数据库】Mysql函数DATE_ADD() 增加日期/时间
- Python中的异常处理Try...except...finally的使用的简单理解
- gitlab hook触发jenkins自动构建