python * args和** kwargs的用法
所属网站分类: python基础 > 函数
1. *args和** kwargs
我已经看到大多数新的python程序员很难搞清楚* args和** kwargs魔术变量的用法。那他们是什么?首先让我告诉你,没有必要写* args或** kwargs。只有*(星号)是必要的。你也可以写* var和** vars。写* args和** kwargs只是一个惯例。所以现在让我们先来看看* args。
1.1 * args的用法
* args和** kwargs主要用于函数定义。* args和** kwargs允许您将可变数量的参数传递给函数。这里的变量意味着您事先不知道用户可以向您的函数传递多少个参数,因此在这种情况下您使用这两个关键字。
def test_var_args(f_arg, *argv):
print("first normal arg:", f_arg)
for arg in argv:
print("another arg through *argv:", arg)
test_var_args('yasoob', 'python', 'eggs', 'test')
这会产生以下结果:
first normal arg: yasoob another arg through *argv: python another arg through *argv: eggs another arg through *argv: test
那么现在让我们谈谈** kwargs
1.2 ** kwargs的用法
** kwargs允许您将keyworded可变长度的参数传递给函数。如果要在函数中处理命名参数,则应使用** kwargs 。这是一个让你开始使用它的例子:
def greet_me(**kwargs):
for key, value in kwargs.items():
print("{0} = {1}".format(key, value))
>>> greet_me(name="yasoob")
name = yasoob
所以你可以看到我们如何处理函数中的keyworded参数列表。这只是** kwargs的基础,你可以看到它是多么有用。现在让我们谈谈如何使用* args和** kwargs来调用带有参数列表或字典的函数。
1.3 使用* args和** kwargs来调用函数
所以在这里我们将看到如何使用* args和** kwargs调用函数。只要考虑一下你有这个小功能:
def test_args_kwargs(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
现在你可以使用* args或** kwargs将参数传递给这个小函数。这是怎么做的:
# first with *args
>>> args = ("two", 3, 5)
>>> test_args_kwargs(*args)
arg1: two
arg2: 3
arg3: 5
# now with **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)
1.4 什么时候使用它们?
这实际上取决于您的要求。最常见的用例是制作函数装饰器(在另一章中讨论)。此外,它也可以用于猴子修补。Monkey修补意味着在运行时修改一些代码。假设您有一个带有函数的类,该函数get_info调用API并返回响应数据。如果我们想测试它,我们可以用一些测试数据替换API调用。例如:
import someclass
def get_info(self, *args):
return "Test data"
someclass.get_info = get_info
我相信你也可以考虑其他一些用例。
python * args和** kwargs的用法的更多相关文章
- Python中 * 与 **, *args 与 **kwargs的用法
* 用于传递位置参数(positional argument) ** 用于传递关键字参数(keyword argument) 首先,先通过一个简单的例子来介绍 * 的用法: def add_funct ...
- Python中*args 和**kwargs的用法
当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值.还是直接来代码吧,废话少说[python] def fun_var_args(far ...
- Python *args 和 **kwargs用法
*args的参数形式把剩下的没有关键字的参数收起来形成一个tuple,*kwargs把有关键字的收起来做成一个字典 def this_fun(a,b,*args,**kwargs): print a ...
- 【Python】Python中*args 和**kwargs的用法
好久没有学习Python了,应为工作的需要,再次拾起python,唤起记忆. 当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值. 还是 ...
- python 可变参数函数定义* args和**kwargs的用法
python函数可变参数 (Variable Argument) 的方法:使用*args和**kwargs语法.其中,*args是可变的positional arguments列表,**kwargs是 ...
- python的*args和**kwargs基础用法
*args表示任何多个无名参数,它是一个tuple **kwargs:传入的字典,就如:a=1,传入键值,默认就传入到**kwargs中,如下面代码: class FOO: def __init__( ...
- python/*args和**kwargs
*args和**kwargs #coding=utf8 __author__ = 'Administrator' # 当函数的参数不确定时,可以使用*args和**kwargs.*args没有key值 ...
- python *args,**kwargs参数
实际上,关键的是*和** 我们以三个例子来解释: 普通的使用参数: def test1(arg): print(arg) test1("a") 输出: a *是将剩下的参数用元祖表 ...
- python:*args和**kwargs的用法
1.*args用来将参数打包成tuple给函数体调用 代码: # *args用来将参数打包成tuple给函数体调用 def func(*args): print(args,type(args)) fu ...
随机推荐
- 冷笑话,idea 按删除键就是undo?
第一反应是keymap被改了,一看 那么,看起来就是alt出问题了 解决方法 在公司换一个键盘或者狂按alt
- C#中动态创建数据库和数据表,很经典【转】
用ADOX创建access数据库方法很简单,只需要new一个Catalog对象,然后调用它的Create方法就可以了,如下: ADOX.Catalog catalog = new Catalog(); ...
- vue 导出excel
1.安装三个依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loader 2.在项目中创建一个文件夹(比 ...
- angular 学习笔记(1) 使用angular完整写法
视图部分: <div ng-app="myapp"> <div ng-controller="myctrl"> <p>{{n ...
- 美团Java面试154道题
Java集合22题 ArrayList 和 Vector 的区别.ArrayList与Vector区别 说说 ArrayList,Vector, LinkedList 的存储性能和特性.ArrayLi ...
- 线程池模块thernd
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import time def task(i): print ...
- Visual Studio 2015 Preview 使用中问题一枚
只要碰到IO读写,文件不存在之类的系统异常,就会崩溃一下给你看看.直接重新VS. 不该有的问题确实存在着???? 正常情况是这样的 直接崩溃时万万不行的!!!!
- 常用宏OC
#ifndef MacroDefinition_h #define MacroDefinition_h //-------------------获取设备大小--------------------- ...
- 小记:vue 及 react 的工程项目入口小结及 webpack 配置多页面应用参考
一.前言 闲暇时间,看了下前端的基础知识,有幸参与了公司公众号项目前面的一个阶段,学习到了一些前端框架的相关知识 小结了一下 自己练习通过新建一个个文件组织起项目的过程中的一些理解 二.项目入口 vu ...
- An incomplete guide to LaTex
LATEX入门与提高.陈志杰数理学院喜闻乐见的电子书.这本电子书由于是图片版本,所以无法使用搜索功能,幸亏目录详细. LaTeX Beginner's Guide.latex使用者都是从模版开始学习, ...