Python中参数打包和解包的实现

 更新时间:2023年09月04日 15:27:48   作者:python收藏家  
在Python中,打包和解包参数是一种操作方式,可以将多个参数打包成一个元组或字典,也可以将一个元组或字典解包成多个参数,本文就来介绍一下如何使用

我们使用两个运算符 *(用于元组)和 **(用于字典)。

考虑这样一种情况:我们有一个函数接收四个参数。我们想调用这个函数,我们有一个大小为4的列表,其中包含该函数的所有参数。如果我们简单地传递一个列表给函数,调用就不起作用。

# A sample function that takes 4 arguments
# and prints them.
def fun(a, b, c, d):
    print(a, b, c, d)
# Driver Code
my_list = [1, 2, 3, 4]
# This doesn't work
fun(my_list)

输出

TypeError: fun() takes exactly 4 arguments (1 given)

解包

我们可以使用 * 来解包列表,这样它的所有元素都可以作为不同的参数传递。

# A sample function that takes 4 arguments
# and prints the,
def fun(a, b, c, d):
    print(a, b, c, d)
# Driver Code
my_list = [1, 2, 3, 4]
# Unpacking list into four arguments
fun(*my_list)

输出

(1, 2, 3, 4)

需要记住参数的长度必须与我们为参数解包的列表的长度相同。

# Error when len(args) != no of actual arguments
# required by the function
args = [0, 1, 4, 9]
def func(a, b, c):
    return a + b + c
# calling function with unpacking args
func(*args)

输出

Traceback (most recent call last):
  File "/home/592a8d2a568a0c12061950aa99d6dec3.py", line 10, in <module>
    func(*args)
TypeError: func() takes 3 positional arguments but 4 were given

再举一个例子,考虑内置的range()函数,它需要单独的开始和停止参数。如果它们不能单独使用,请使用 *运算符编写函数调用,以将参数从列表或元组中解包:

>>>
>>> range(3, 6)  # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)  # call with arguments unpacked from a list
[3, 4, 5]

打包

当我们不知道有多少参数需要传递给Python函数时,我们可以将所有参数打包到元组中。

# A Python program to demonstrate use
# of packing
# This function uses packing to sum
# unknown number of arguments
def mySum(*args):
    return sum(args)
# Driver code
print(mySum(1, 2, 3, 4, 5))
print(mySum(10, 20))

输出

15
30

上面的函数mySum()进行“打包”,将该方法调用接收到的所有参数打包到一个变量中。一旦我们有了这个’packed’变量,我们就可以用它来做我们用普通元组做的事情。args[0]和args[1]将分别给予第一个和第二个参数。由于我们的元组是不可变的,所以可以将args元组转换为列表,这样就可以修改、删除和重新排列i中的项。

下面是一个展示打包和解包的示例。

# A Python program to demonstrate both packing and
# unpacking.
# A sample python function that takes three arguments
# and prints them
def fun1(a, b, c):
    print(a, b, c)
# Another sample function.
# This is an example of PACKING. All arguments passed
# to fun2 are packed into tuple *args.
def fun2(*args):
    # Convert args tuple to a list so we can modify it
    args = list(args)
    # Modifying args
    args[0] = 'python'
    args[1] = 'awesome'
    # UNPACKING args and calling fun1()
    fun1(*args)
# Driver code
fun2('Hello', 'beautiful', 'world!')

输出

(python, awesome, world!)

用于字典

# A sample program to demonstrate unpacking of
# dictionary items using **
def fun(a, b, c):
    print(a, b, c)
# A call with unpacking of dictionary
d = {'a':2, 'b':4, 'c':10}
fun(**d)

输出

2 4 10

这里 ** 解包了与它一起使用的字典,并将字典中的项作为关键字参数传递给函数。所以写“fun(1,**d)”相当于写“fun(1,b=4,c=10)”。

# A Python program to demonstrate packing of
# dictionary items using **
def fun(**kwargs):
    # kwargs is a dict
    print(type(kwargs))
    # Printing dictionary items
    for key in kwargs:
        print("%s = %s" % (key, kwargs[key]))
# Driver code
fun(name="geeks", ID="101", language="Python")

输出

<class 'dict'>
name = geeks
ID = 101
language = Python

应用和要点

  • 在套接字编程中用于向服务器发送大量请求。
  • 在Django框架中用于将变量参数发送到视图函数。
  • 有一些包装函数要求我们传入变量参数。
  • 参数的修改变得很容易,所以必须小心使用它们。

到此这篇关于Python中参数打包和解包的实现的文章就介绍到这了,更多相关Python参数打包和解包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈python的上下文管理器with的用法

    浅谈python的上下文管理器with的用法

    这篇文章主要介绍了浅谈python的上下文管理器with的用法,在一段代码执行前, 先执行__enter__中的代码用于预处理,然后执行 with 中间的代码,最后执行完这段代码之后再执行 exit 中的代码进行清理工作,需要的朋友可以参考下
    2023-07-07
  • Python中列出目录中的文件的五种方法小结

    Python中列出目录中的文件的五种方法小结

    本文主要介绍了Python中列出目录中的文件的五种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 如何更改jupyter的默认文件路径

    如何更改jupyter的默认文件路径

    这篇文章主要介绍了如何更改jupyter的默认文件路径问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Python实现判断一行代码是否为注释的方法

    Python实现判断一行代码是否为注释的方法

    今天小编就为大家分享一篇Python实现判断一行代码是否为注释的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 如何用Python 实现景区安防系统

    如何用Python 实现景区安防系统

    本设计中,利用YOLO目标检测算法、Openpose姿态识别算法、deepsort跟踪算法、MSCNN人群密度估计算法实现了火灾监测、吸烟监测、行为安全监测、人群密度监测、口罩率监测、人员定位监测六大功能,对Python 实现景区安防系统感兴趣的朋友一起看看吧
    2022-07-07
  • python中实现修改图像分辨率大小

    python中实现修改图像分辨率大小

    这篇文章主要介绍了python中实现修改图像分辨率大小问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 一文详解pygame.sprite的精灵碰撞

    一文详解pygame.sprite的精灵碰撞

    精灵其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具、人物、场景装饰等,它们都可以看做成一张张小的“精灵”图,下面这篇文章主要给大家介绍了关于pygame.sprite精灵碰撞的相关资料,需要的朋友可以参考下
    2023-01-01
  • Python keras.metrics源代码分析

    Python keras.metrics源代码分析

    最近在用keras写模型的时候,参考别人代码时,经常能看到各种不同的metrics,因此会产生几个问题,下面主要介绍了Python keras.metrics源代码分析
    2022-11-11
  • python turtle工具绘制四叶草的实例分享

    python turtle工具绘制四叶草的实例分享

    在本篇文章里小编给各位整理的是关于python turtle工具绘制四叶草的实例分享,有兴趣的朋友们可以跟着学习下。
    2020-02-02
  • Pandas拼接concat使用方法

    Pandas拼接concat使用方法

    当我们需要将两个Pandas DataFrame对象合并为一个时,就需要使用Pandas拼接函数,本文主要介绍了Pandas拼接concat使用方法,感兴趣的可以了解一下
    2023-12-12

最新评论