谈一谈python中的魔法变量*args和**kwargs

简介: 导读 最近看了看github大佬写的代码后,发现自己之前写的代码就是个,没有注释,没有封装,没有可读性。哎,幸亏发现及时,现在正在写一个新的任务,刚好可以好好弄弄架构和代码了 在弄代码期间发现了*args和**kwargs这两个参数大佬们有时候经常用,当然最多的其实是在阅读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

本文来自云栖社区合作伙伴“深度学习自然语言处理”,了解相关信息可以关注“深度学习自然语言处理”。

相关文章
|
1月前
|
存储 开发者 索引
python怎么判断变量的数据类型
python怎么判断变量的数据类型
29 0
|
1月前
|
存储 算法 开发者
Python新手常见问题二:如何正确理解和使用变量?
在Python编程的世界中,变量是程序设计的基础元素之一。它就像是一个可以存储数据的容器,帮助我们管理和操作程序中的各种信息。对于初学者而言,正确理解和使用变量至关重要,因为它是构建复杂逻辑、实现高效算法以及创建实用程序的关键所在。本文将带领Python新手深入探讨变量的本质,并通过实例讲解如何在实际编程场景中有效运用。
23 1
C4.
|
1月前
|
存储 Java Python
Python的变量
Python的变量
C4.
18 0
|
1天前
|
索引 Python
Python高维变量选择:SCAD平滑剪切绝对偏差惩罚、Lasso惩罚函数比较
Python高维变量选择:SCAD平滑剪切绝对偏差惩罚、Lasso惩罚函数比较
|
3天前
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
|
27天前
|
存储 Python
Python变量与数据类型探秘
本文介绍了Python编程中的核心概念——变量和数据类型。变量是存储数据的标识符,无需预声明类型,类型由赋值自动确定。命名规则要求变量名具有描述性,以字母或下划线开头,区分大小写。Python支持多种数据类型:数值(整数、浮点数、复数)、字符串、列表、元组、字典和集合。理解这些基本概念和类型特性对编写高效Python代码至关重要。
|
29天前
|
存储 算法 数据挖掘
【Python 基础教程 25】全面入门指南:深度解析Python3的命名空间,作用域及变量使用教程
【Python 基础教程 25】全面入门指南:深度解析Python3的命名空间,作用域及变量使用教程
50 0
|
1月前
|
数据处理 索引 Python
python变量以及数据类型(四)
python变量以及数据类型(四)
19 1
|
1月前
|
存储 Python
python变量以及数据类型(三)
python变量以及数据类型(三)
23 2
|
1月前
|
存储 Python
python变量以及简单数据类型(二)
python变量以及简单数据类型(二)
12 1