最近在带着新成员一起学习《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相关推荐

  1. python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...

    Python内置了很多函数,可以直接调用.Python内置的函数可以通过官方文档查看.也可以通过help()查看帮助信息.函数名是指向函数对象的引用,把函数名赋给变量,相当于给函数起了别名. 1. 定 ...

  2. python魔法参数_python中的魔法参数:*args和**kwargs

    def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '------------------- ...

  3. python中的魔法参数:*args和**kwargs

    def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '------------------- ...

  4. (转)python中的参数:*args和**kwargs

    def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '------------------- ...

  5. python计算传入数字参数的和_Python基础_6

    函数 刘吖星 2019/10/15 什么是函数 我们都知道圆的面积计算公式是 $S = πR^2$ 所以当我们知道圆的半径 R 的时候,就可以根据公式计算出圆的面积.现在假设我们需要计算三个不同大小的 ...

  6. python怎么理解函数的参数_理解Python中函数的参数

    定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解 ...

  7. python干货_python 基础干货 02

    list 与 tuple list 类似 数组 tuple 跟 list 一样, 只是一旦定义, 里边的内容不可以改变. 这样, 上边的内容就不可以改变了. "可变的" tuple ...

  8. python函数可以按照参数名称方式传递参数_python函数传入参数(默认参数、可变长度参数、关键字参数)...

    1.python中默认缺省参数----定义默认参数要牢记一点:默认参数必须指向不变对象! 1 def foo(a,b=1):2 printa,b3 4 foo(2) #2 1 5 foo(3,100) ...

  9. python中函数包括参数函数吗_Python中的函数---函数的定义和参数

    本文是廖雪峰教程的笔记. 函数的定义 定义函数时,需要确定函数名和参数个数 def fun(x1,x2,x3):: 如果有必要,可以先对参数的数据类型做检查: 函数体内部可以用return随时返回函数 ...

最新文章

  1. python opencv 图像膨胀
  2. kerberos简单介绍
  3. 洛谷 P3391 文艺平衡树
  4. 这算不算职场PUA?
  5. 架构师必读!以图文的方式解锁 HTTPS原理,10分钟还原HTTPS真像!
  6. webpack路径问题总结
  7. MYSQL中日期与字符串间的相互转换
  8. web和python哪个好_用python开发app和web哪个比较容易?
  9. mysql 锁表 for update,MySQL中select * for update锁表的问题(转)
  10. Python教程:while 循环用法讲解
  11. 2021年N1叉车司机找解析及N1叉车司机试题及解析
  12. JavaScript函数-创建参数个数不限数量的函数
  13. Java中introduce方法,Introduce Foreign Method (引入外加函数)
  14. 音频信号输入itc服务器,音频信号的两种传输方式,你知多少?
  15. 【珍藏版】⼤数据中台架构及解决⽅案
  16. NLP-D32-毕设答辩准备-《人类语言处理》03-04
  17. 网络运维与管理2013超值精华本
  18. 搜狗日志Hive数据分析
  19. 婚礼的正确打开方式:“电子+纸质”请柬,让婚礼更出彩
  20. POJ-2438 哈密顿环 哈密瓜很甜

热门文章

  1. 7价 半导体掺杂_掺杂工艺(一)
  2. 【OpenCV 例程200篇】27. 图像的旋转(以任意点为中心)
  3. mysql have_mysql having的用法
  4. ipv6的127位掩码如何表示_子网掩码为255.255.255.0代表的意思是什么?
  5. 深入浅出理解HOG特征---梯度方向直方图
  6. 职称计算机考试有哪些题,职称计算机考试判断复习题「有答案」
  7. 傲云浏览器linux,Centos7安装部署zabbix监控软件
  8. 【数据库】Mysql函数DATE_ADD() 增加日期/时间
  9. Python中的异常处理Try...except...finally的使用的简单理解
  10. gitlab hook触发jenkins自动构建