前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中*args 和 **kwargs 的用法学习笔记

python中*args 和 **kwargs 的用法学习笔记

作者头像
用户7886150
修改2021-01-18 11:31:11
3840
修改2021-01-18 11:31:11
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: 带有* args和** kwargs的Python中的可变长度参数

*args 和 **kwargs 主要用于函数定义。 你可以将不定数量的参数传递给一个函数。

1、*args 是用来发送一个(非键值对)可变数量的参数列表给一个函数 这里有个例子帮你理解这个概念:

 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

2、**kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数, 你应该使用**kwargs。 这里有个让你上手的例子:

 def greet_me(**kwargs):

     for key, value in kwargs.items():

         print("{0} == {1}".format(key, value))

 >>> greet_me(name="yasoob")

 name == yasoob

 现在你可以看出我们怎样在一个函数里, 处理了一个键值对参数了。

3、使用 *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

 那么如果你想在函数里同时使用所有这三种参数, 顺序是这样的:

 some_func(fargs, *args, **kwargs)

4、什么时候使用它们? 这还真的要看你的需求而定。

 最常见的用例是在写函数装饰器的时候。

 此外它也可以用来做猴子补丁(monkey patching)。猴子补丁的意思是在程序运行时(runtime)修改某些代码。 打个比方,你有一个类,里面有个叫get_info的函数会调用一个API并返回相应的数据。如果我们想测试它,可以把API调用替换成一些测试数据。例如:

 import someclass

 def get_info(self, *args):

     return "Test data"

someclass.get_info = get_info 

学习文档:http://wiki.jikexueyuan.com/project/interpy-zh/

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档