任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~

在python中,有些常见方法参数是:*self._args, **kwargs,如:self._target(*self._args, **self._kwargs)。经过查找一些资料,可以归纳为以下两种类型:

  • *self._args 表示接受元组类参数;
  • **kwargs     表示接受字典类参数;

例子:

def foo(*args, **kwargs):print 'args = ', argsprint 'kwargs = ', kwargsprint '---------------------------------------'
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='2', c=3)

输出结果如下:

args =  (1, 2, 3, 4)
kwargs =  {}
---------------------------------------
args =  ()
kwargs =  {'a': 1, 'c': 3, 'b': 2}
---------------------------------------
args =  (1, 2, 3, 4)
kwargs =  {'a': 1, 'c': 3, 'b': 2}
---------------------------------------
args =  ('a', 1, None)
kwargs =  {'a': 1, 'c': 3, 'b': '2'}
---------------------------------------

可以看到,这两个是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”

此外,在Python类定义的方法中,有这样一种写法:


class Test_(object):def __init__(self, x, y):self.__x = xself.__y = ydef __repr__(self):class_name = type(self).__name__return '{}:({!r}, {!r})'.format(class_name, *self)def __iter__(self):return (i for i in (self.__x, self.__y))def test(*self):print(self)def test2(self):print(self)

输出如下:

>>>dd.test()
(Test_:(2, 3),)>>>dd.test2()
Test_:(2, 3)>>>dd
Test_:(2, 3)

从上面的例子可以看出,在方法中传入(*self),执行打印操作时,返回值是序列(这里是单元素元组),而传入self参数时,会返回我们期待的repr格式

Python中的*self,*self._args, **kwargs相关推荐

  1. python 中*args 和 **kwargs的区别

    *args的用法 当你不确定你的函数里将要传递多少参数时你可以用*args.例如,它可以传递任意数量的参数: def print_everything(*args):for count, thing ...

  2. Python中的*args和**kwargs是什么?该如何使用?

    2020-01-16 12:30:00 全文共2911字,预计学习时长9分钟 来源:Pexels 在编程中,函数就是生命! 作为使用Python的新手--无论是编程新手,还是熟悉另一语言的人--都需要 ...

  3. python中args和kwargs_Python 函数参数*args和**kwargs

    尽管*args和**kwargs参数不受重视,但这它们是Python中非常有用的特性.了解其中的潜能会让你成为更高效的开发者. *args和**kwargs参数到底有什么用呢?它们能让函数接受可选参数 ...

  4. Python 中的*args和**kwargs

    实际上真正的Python参数传递语法是*和**.*args和**kwargs只是一种约定俗成的编程实践.我们也可以写成*vars和**kvars. 可以看到,这两个是python中的可变参数. *ar ...

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

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

  6. python args kwargs 理解_*args和**kwargs在python中的作用

    我发现PYTHON新手在理解*args和**kwargs这两个魔法变量的时候有些困难.他们到底是什么呢? 首先,我先告诉大家一件事情,完整地写*args和**kwargs是不必要的,我们可以只写*和* ...

  7. python中*args **kwargs

    Python中*args和**kwargs的区别 (注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 中秋的夜,微凉,但却始终看不见月亮. 我想,它一定是害羞了,悄悄的躲到了乌 ...

  8. python 中参数*args, **kwargs

    python 中参数*args, **kwargs def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs ...

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

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

  10. Python中可变长度的参数args和**kwargs

    目录 1.*args的使用方法 2.**kwargs的使用方法 在编程的过程中,我们可能会遇到函数参数个数不固定的情况.这时就需要使用可变长度的函数参数来实现我们的功能.在Python中,有两种变长参 ...

最新文章

  1. SpringMVC学习手册(三)------EL和JSTL(上)
  2. 多个文件中的数据处理,输出自己想要是数据
  3. 你的首个 Progressive Web App
  4. Apache kafka 工作原理介绍
  5. VoIP安全问题解析
  6. mahout in Action2.2-给用户推荐图书(2)-分析对用户推荐书目的结果
  7. 数据帧,数据包,报文段,报文,分组,数据包的概念和区别
  8. flowable 任务节点多实例使用
  9. UE4 查看打包文件内容
  10. Java描述设计模式(05):原型模式
  11. MFC1、动态创建CButton
  12. [Python] L1-029. 是不是太胖了-PAT团体程序设计天梯赛GPLT
  13. 硬盘 : ATA、ATAPI的含义
  14. Servlet基础详解
  15. 一个好的测试工程师的简历到底是怎么写的
  16. 数字化转型中平台思维的十大要素-《数字化转型的道与术》
  17. 当《流浪地球》冲过2亿:中国的科幻大片为什么来得这么晚?
  18. cgb2107-day02
  19. 数据结构课程设计(部分选题)
  20. iPhone 12已安装的App显示正在安装处理方法

热门文章

  1. ajax-page局部刷新分页实例
  2. jQuery中的编程范式
  3. sql记录去重(SQL查询或者删除表中重复记录)
  4. spring mvc 重新定向到一个新的Url
  5. SQL 错误代码汇总
  6. 关于SqlDataReader类型的变量传值问题
  7. P1268 树的重量
  8. cassandra vs mongo (1)存储引擎
  9. js中多行字符串拼接
  10. Poj(2679),SPFA,邻接表(主流写法)