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自动化测试Eclipse+Pydev 搭建开发环境

    Python自动化测试Eclipse+Pydev 搭建开发环境

    本文主要介绍python自动化测试环境搭建,这里对Eclipse+Pydev 搭建开发环境做了图文详解,有需要的小伙伴可以参考下
    2016-08-08
  • Python实现文件下载的方法汇总与适用场景介绍

    Python实现文件下载的方法汇总与适用场景介绍

    在Python开发中,文件下载是常见需求,本文将全面介绍10种Python下载文件的方法,每种方法都配有完整代码示例和适用场景分析,大家可以根据需要进行选择
    2025-05-05
  • Python Flask实现后台任务轻松构建高效API应用

    Python Flask实现后台任务轻松构建高效API应用

    本文介绍如何使用Python Flask框架实现后台任务,以快速构建高效的API应用。通过实例演示,读者将学会如何利用Flask框架搭建后台任务,实现异步处理和多线程操作等高级功能,提升应用性能和用户体验
    2023-04-04
  • Python中最大递归深度值的探讨

    Python中最大递归深度值的探讨

    今天小编就为大家分享一篇关于Python中最大递归深度值的探讨,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 使用matplotlib在Python中绘制数据的详细教程

    使用matplotlib在Python中绘制数据的详细教程

    Python 在处理数据方面非常出色,通常,数据集 会包括多个变量和许多实例,这使得很难理解数据的情况,数据可视化是帮助您识别数据模式的一种有用方式,本教程将描述如何使用 matplotlib 在 Python 中绘制数据,需要的朋友可以参考下
    2024-10-10
  • 一文带你掌握Python中文词频统计

    一文带你掌握Python中文词频统计

    词频统计是指在文本中计算每个词出现的次数。这篇文章主要带大家了解一下Python实现中文词频统计的方法,感兴趣的小伙伴可以了解一下
    2023-02-02
  • 使用Python实现批量访问URL并解析XML响应功能

    使用Python实现批量访问URL并解析XML响应功能

    在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响应功能,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2025-01-01
  • 吴恩达机器学习练习:神经网络(反向传播)

    吴恩达机器学习练习:神经网络(反向传播)

    这篇文章主要介绍了学习吴恩达机器学习中的一个练习:神经网络(反向传播),在这个练习中,你将实现反向传播算法来学习神经网络的参数,需要的朋友可以参考下
    2021-04-04
  • ​​​​​​​Python 入门学习之函数式编程

    ​​​​​​​Python 入门学习之函数式编程

    这篇文章主要介绍了​​​​​​​Python 入门学习之函数式编程, Python 中的函数式编程技术进行了简单的入门介绍,下文详细内容需要的小伙伴可以参考一下
    2022-05-05
  • Python 常见加密操作的实现

    Python 常见加密操作的实现

    这篇文章主要介绍了Python 常见加密操作的实现,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03

最新评论