谈一谈python中的魔法变量*args和**kwargs
导读
最近看了看github大佬写的代码后,发现自己之前写的代码就是个,没有注释,没有封装,没有可读性。哎,幸亏发现及时,现在正在写一个新的任务,刚好可以好好弄弄架构和代码了
在弄代码期间发现了*args和**kwargs这两个参数大佬们有时候经常用,当然最多的其实是在阅读python自己的源代码的时候最长见了,今天我终于了解清楚它们到底是啥了,大家一起来看!
小小声明
先弄个声明哈,*args和**kwargs这种写法不是必须的,只有前面的 * 才是必须的。当然你也可以写成*var和**vars,而写成*args和**kwargs是一个约定俗成的一个命名规范而已。
*args的用法
*args和**kwargs主要用于函数定义。功能是将不确定数量的参数传递给一个函数。
这里说说*args,它是用来发送一个非键值对的可变数量的参数列表给一个函数。
吃个栗子:
def test_var_args(f_arg, *args): print("first normal arg:", f_arg) for arg in args: print("another arg through *args:", arg) test_var_args('zero', 'one', 'two', 'three')
输出结果为: first normal arg: one another arg through *args: one another arg through *args: two another arg through *args: three
懂了吧,咱们进行下一个**kwargs!
**kwargs的用法
上面的*args说的是非键值对,所以这里肯定就是键值对啦。如果你想要一个函数里传入带名字的参数,就可以用**kwargs。
吃个栗子:
def test_var_kwargs(**kwargs): for key, value in kwargs.items(): print("{0} == {1}".format(key, value)) >>> test_var_kwargs(arg0="zero",arg1="one") arg0 == zero arg1 == one
简单吧。接下来我们谈谈如何使用*args和**kwargs来调用一个参数为列表或字典的函数!
使用*args和**kwargs来调用函数
假设你要实现这样的一个函数:
def test_args_kwargs(arg1, arg2, arg3): print("arg1:", arg1) print("arg2:", arg2) print("arg3:", arg3)
你可以这样使用*args和**kwargs:
# 首先使用 *args >>> args = ("two", 3, 5) >>> test_args_kwargs(*args) arg1: two arg2: 3 arg3: 5 # 现在使用 **kwargs: >>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5} >>> test_args_kwargs(**kwargs) arg1: 5 arg2: two arg3: 3
*args和**kwargs的使用顺序
如果你想要使用所有的参数情况的话,他们的顺序是这样的:
some_func(fargs, *args, **kwargs)
*args是可变的positional arguments列表,**kwargs是可变的keyword arguments列表。并且,*args必须位于**kwargs之前,因为positional arguments必须位于keyword arguments之前。 原文发布时间为:2018-10-14
本文作者:zenRRan
本文来自云栖社区合作伙伴“深度学习自然语言处理”,了解相关信息可以关注“深度学习自然语言处理”。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hanlp等七种优秀的开源中文分词库推荐
中文分词是中文文本处理的基础步骤,也是中文人机自然语言交互的基础模块。由于中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词。 纵观整个开源领域,陆陆续续做中文分词的也有不少,不过目前仍在维护的且质量较高的并不多。下面整理了一些个人认为比较优秀的中文分词库,以供大家参考使用。 1、HanLP —— 汉语言处理包 HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。 HanLP提供下列功能: l 中文分词 l HMM-Bigram(速度与精度最佳平衡;一百兆内存) l 最短路分词、N-最短路分词 l 由字构词(侧重精度,可识别新词;适合NLP任务) l 感知机分词、CRF分词 l 词典分词(侧重速度,每秒数千万字符;省内存) l 极速词典分词 l 所有分词器都支持: l 索引全切分模式 l 用户自定义词典 l 兼容繁体中文 l 训练用户自己的领域模型 l 词性标注 l HMM词性标注(速度快) l 感知机...
- 下一篇
NLP学习------HanLP使用实验
在之前的实验中得到了不在词向量里的词与分词结果,结果有500多个词不在词向量里,解决方案就是重新分词,或再追加训练这些词到词向量里。但后者相对麻烦且目前样本量不大。我跟据词向量的作者[6]所使用的分词工具来分词,会比不同工具(jieba)的效果要好,因为都是同一模式的分词,分出来的词应该都会存在于大型语料库中。实验证明思路是对的,最后结果是只有60几个词不在词向量里,其中大部分为名词,还有些为因语音翻译问题所造成的出错连词,所有这些词也只出现一次,这部分可以考虑最后删去也不会影响结果。改善未出现词是个关键步骤,因为此后模型会用到词向量,如果未出现词过多,会影响词向量效果。 问题:不过最后HANLP分词影响了实验判断结果,准确率从93%(jieba分词,同模型同参数)下降到90%。 实验:使用HanLP分词1 1,前期准备,(环境ubuntu,python3)安装JAVA-10[3](hanlp是JAVA开发的,即使使用python调用pyhanlp需要借助java),jpype(python中虚拟java环境),hanlp(开源中文处理工具,不只是分词还有各种工具),hanlp的roo...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker使用Oracle官方镜像安装(12C,18C,19C)