Python中的解包(tuple和dict的解包、*、**)的几种使用方法

 更新时间:2025年11月24日 09:50:41   作者:Le0v1n  
本文主要介绍了Python中的解包的使用,包括uple和dict的解包、*、**,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. 问题

为什么 np.random.randn(*images_example.shape) 中的 images_example.shape 前面需要加 *

2. 解决问题

在 Python 里面,* 表示解包(一般是用于 List 和 Tuple),** 也是解包,但它用于 字典 Dict 的解包。因此,images_example.shape 前面的 * 其实也是解包的意思。

对于一个 tensor,它的属性 .shape返回的是一个 Tuple(元组),但 np.random.randn() 的里面要的参数不能是一个 Tuple 对象,而应该是 int。所以这里的 * 其实就是把 Tuple 拆成了 int

3. 例子

example_list = [1, 2, 3]
print(f"{example_list = }")
print(f"{type(example_list) = }")
print("*example_list:", *example_list)
print()

example_tuple = (1, 2, 3)
print(f"{example_list = }")
print(f"{type(example_list) = }")
print("*example_tuple:", *example_list)

结果如下:

example_list = [1, 2, 3]
type(example_list) = <class 'list'>
*example_list: 1 2 3

example_list = [1, 2, 3]
type(example_list) = <class 'list'>
*example_tuple: 1 2 3

这个例子中,我们看到:

  • [1, 2, 3] 经过 * 后变为了 1 2 3 这样很诡异的样子
  • (1, 2, 3) 经过 * 后变为了 1 2 3 这样很诡异的样子

为什么说它"诡异"呢?

因为它的类型是不能求的,会报错:

tuple = (1, 2, 3)
print("type(*tuple):", type(*tuple))

结果如下:

Traceback (most recent call last):
  File "C:\Users\Leovin\Desktop\Desktop\pytorch\books\src\leovin\Encoder & Decoder\Exp_3.py", line 2, in <module>
    print("type(*tuple):", type(*tuple))
TypeError: type.__new__() argument 1 must be str, not int

那么 1 2 3 这种诡异的形式放到 np.random.randn() 中会怎么样?那么是分批放入,还是一起放入?我们做一个验证就可以知道了:

import numpy as np


a = (1, 2, 3)
np.random.seed(42)
A = np.random.randn(*a)

np.random.seed(42)
B = np.random.randn(1, 2, 3)

print(f"{A = }")
print(f"{B = }")

结果如下:

A = array([[[ 0.49671415, -0.1382643 ,  0.64768854],
        [ 1.52302986, -0.23415337, -0.23413696]]])
B = array([[[ 0.49671415, -0.1382643 ,  0.64768854],
        [ 1.52302986, -0.23415337, -0.23413696]]])

那么,答案很清晰了。(1, 2, 3) 这个 Tuple 被拆成了 1 2 3,是按照 1, 2, 3 这样的样子放进 np.random.randn() 当中的,即 np.random.randn(*(1, 2, 3)) <=> np.random.randn(1, 2, 3)

到此这篇关于Python中的解包(tuple和dict的解包、*、**)的几种使用方法的文章就介绍到这了,更多相关Python 解包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 脚本实现淘宝准点秒杀功能

    Python 脚本实现淘宝准点秒杀功能

    这篇文章主要介绍了python实现淘宝准点秒杀脚本,本文图文实例相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • pycharm开发工具使用plt.show()不显示图像的解决方案

    pycharm开发工具使用plt.show()不显示图像的解决方案

    文章描述了在使用PyCharm开发工具时,`plt.show()`不显示图像的问题,并提供了两种解决方法:首先是在设置中取消勾选“PythonScientific”选项,然后重新运行程序即可显示图像
    2026-03-03
  • Python爬虫运用正则表达式的方法和优缺点

    Python爬虫运用正则表达式的方法和优缺点

    这篇文章主要给大家介绍了关于Python爬虫运用正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • python之enumerate用法小结

    python之enumerate用法小结

    enumerate()是Python内置的一个非常有用的函数,常常用来在循环中获取元素的索引和元素的值,下面就来介绍一下enumerate用法小结,感兴趣的可以了解一下
    2025-08-08
  • Python使用pytz实现时区使用与转换的示例详解

    Python使用pytz实现时区使用与转换的示例详解

    这篇文章主要为大家详细介绍了Python如何使用pytz实现时区使用与转换,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下
    2025-11-11
  • Python+OpenCV实现相机标定的方法详解

    Python+OpenCV实现相机标定的方法详解

    opencv中内置了张正友的棋盘格标定法,通过一些姿态各异的棋盘格图像,可以标定相机的内外参数,本文为大家介绍OpenCV进行相机标定的具体方法,希望对大家有所帮助
    2023-05-05
  • python读取Android permission文件

    python读取Android permission文件

    python解析json文件读取Android permission,同时可以学习到json的知识。
    2013-11-11
  • Django中模版的子目录与include标签的使用方法

    Django中模版的子目录与include标签的使用方法

    这篇文章主要介绍了Django中模版的子目录与include标签的使用方法,有利于Python的Django框架的模版布局,需要的朋友可以参考下
    2015-07-07
  • Mac下卸载PyCharm实现方法

    Mac下卸载PyCharm实现方法

    本文主要讲解了Mac下PyCharm的卸载方法,包括删除应用程序文件、应用支持文件、偏好设置数据、缓存数据、日志数据、设置文件、程序状态文件和诊断及崩溃日志文件等步骤
    2026-05-05
  • Python 实现list,tuple,str和dict之间的相互转换

    Python 实现list,tuple,str和dict之间的相互转换

    这篇文章主要介绍了Python 实现list,tuple,str和dict之间的相互转换,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论