令人困惑的 python 星号表示法的双重使用(作为函数参数,或作为函数定义)

2023-11-30

我有点困惑。让我们创建一个名为 x 的函数。我知道通过在 y 之前添加 * ,这意味着我们可以添加任意数量的参数。

def x(*y):
    return y

然而。

Case 1:

>>> x(1, 2)
(1, 2)

Case 2:让我们传递一个前面带有星号的列表 [1,2]:

>>> x(*[1,2])
(1, 2)

看起来单个星号有两个用途:

  1. 用于在函数中允许多个参数 - 本质上是将它们放入列表中
  2. 如果完成两次,将列表“分解”为单独的项目

为什么是这样?为什么我不能做类似:*a*b 的事情?


在函数定义中*用于在函数调用中收集元组中的所有位置参数*解压一个可迭代对象并将其项目作为位置参数传递。

If by *a*b你正在尝试解压两个迭代器/迭代器a and b那么正确的方法是:

>>> a = [1, 2, 4]
>>> b = 'foo'
>>> from itertools import chain
def func(*x):
    print x
...     
>>> func(*chain(a,b)) #chain will work for both iterators and iterables
(1, 2, 4, 'f', 'o', 'o')

if both a and b具有相同类型并且可迭代,那么您还可以使用:

>>> a = [1, 2, 4]
>>> b = [0,1]
>>> func(*(a + b))
(1, 2, 4, 0, 1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

令人困惑的 python 星号表示法的双重使用(作为函数参数,或作为函数定义) 的相关文章

随机推荐

  • JDBC 中的 EntityManager 刷新模式

    JPA 本质上是 JDBC 的更高抽象 EntityManager 有一个 API setAutoFlushMode 它可以设置为 AUTO 或 COMMIT 在 JDBC 术语中 这相当于什么 谢谢 JDBC 也具有自动提交功能 它们都用
  • Ant build.xml需要用户输入,但Eclipse没有tty

    我正在尝试将 Eclipse 与我的 build xml 更好地集成 我的构建文件为程序的本机部分调用 GNU Make 并且 Makefile 使用 sudo 将编译的库移动到系统路径中 不幸的是 这需要输入密码 并且 Eclipse 的
  • 安全地检查变量的类型

    对于系统 我需要将指针转换为 long 然后将 long 转换回指针类型 正如您可以猜到的那样 这是非常不安全的 我想做的是使用dynamic cast来进行转换 所以如果我混合它们 我会得到一个空指针 这一页说http publib bo
  • rabbitmq-server安装CentOS - Erlang错误

    我有centos 6并尝试使用rpm安装rabbitmq 3 5 3 没有 yum 选项 这让我陷入了错误 root osboxes CentOS rpm Uvh rabbitmq server 3 5 3 1 noarch rpm war
  • C++ 自定义操作返回空字符串

    我们在 C 中的延迟自定义操作方面遇到问题 我们只需要自定义操作数据属性 apacheconfpath 的值 该属性目前具有测试的虚拟值 这是我们的 C 自定义操作 UINT stdcall AppendToApacheConfigFile
  • Unity2D:缩放游戏对象而不缩放其子对象

    我有一个敌人 里面有孩子 敌人也有死亡动画 在死亡动画中 使用动画师 我将敌人缩放到适当的大小 然而 敌人内部的孩子也被缩小 即使我在孩子上有一个动画 我已经调整了它的大小 我还在这个孩子上添加了锚点位置 有没有办法既能缩小敌人的规模 又能
  • Azure 事件中心 - 异地恢复:它是否复制到次要区域?

    根据微软的文章 https learn microsoft com en us azure event hubs event hubs geo dr 根据设计 事件中心异地灾难恢复不会复制数据 因此您无法在辅助事件中心上重复使用主事件中心的
  • Node.js 错误:找不到模块“请求”

    好的 这是一个常见的错误 我已经读过这篇文章node js 找不到模块 请求 请求模块安装在我的node modules中 我的完整节点应用程序是 var r require request var s r http www foo com
  • PowerShell:GetNewClosure() 和带验证的 Cmdlet

    我试图了解 GetNewClosure 如何在 PowerShell 2 中的脚本 cmdlet 上下文中工作 本质上 我有一个返回对象的函数 如下所示 function Get AnObject param CmdletBinding P
  • 如何处理删除函数中的 GORM 错误?

    我有这个功能 var db gorm DB func DeleteCategory id uint error var category Category category ID id result db Delete category f
  • 运行 chrome 扩展并在页面加载时将数据提交到 PHP 脚本(自动化该过程)

    我第一次使用 chrome 扩展进行网络爬行 我在 HTML 弹出窗口中获取数据 然后在单击按钮时将其提交给 PHP 脚本 现在我想在页面加载时执行此功能 因此 页面加载数据将被收集并将其提交给 PHP 脚本 我正在使用如下扩展 清单 js
  • 如何在Android中使用intentservice同时下载多个文件?

    我想创建一项与此类似的服务 参考来自Here 在 Android 中异步下载多个文件 public static class DownloadingService extends IntentService public static St
  • 线程中的 QTimer - 事件未处理?

    我有一个从 QThread 派生的对象 类定义包括 Q OBJECT 宏 我在线程中创建了一个计时器 这样我就可以在线程运行时偶尔进行一些检查 但是 超时事件从未发生 我也尝试过将计时器设为单次 但没有发出任何事件 默认情况下事件是在线程中
  • php 驱动程序 mongodb ,从未加载

    我已经安装了 MongoDB wamp 服务器 并且在 MongoDB 中添加了一个集合 然后我从下载了 php mongo 1 6 8 zipS3 gt 确定 zip 文件中有很多文件 但我需要哪一个 Windows 10 64 位 我找
  • iOS 中的透明环

    我的视图中有一个圆形头像 我这样做是这样的 self imageView layer cornerRadius 75 self imageView layer masksToBounds YES self imageView layer b
  • 自动 gmail 登录 [在 oAuth 期间] 因用户验证而被阻止

    此代码用于登录 Gmail public void login User user WebDriverWait wait new WebDriverWait driver 60 WebElement emailTextBox wait un
  • 如何正确地将元组序列化为键字典

    我有以下应用程序 显示字典的关键部分未发送到JsonConverter 但它被称为ToString 在 这对我来说是一个问题 因为我无法反序列化我的Json细绳 有任何想法吗 class Program static void Main s
  • 最好的通用 SVN 忽略模式?

    最好的 或尽可能好的 通用 SVN 忽略模式是什么 有许多不同的 IDE 编辑器 编译器 插件 平台等特定文件和一些 重叠 的文件类型 即 某些类型的项目需要 而其他类型的项目不需要 然而 无论您的开发环境的具体情况如何 您永远都不希望将大
  • 如何停止 Flex Canvas 上的子元素触发 Mouse Out 事件

    我正在使用 Canvas itemRenderer 作为用于显示图像的容器 请参阅下面的伪代码 image new Image image source data thumb this addChild image this addEven
  • 令人困惑的 python 星号表示法的双重使用(作为函数参数,或作为函数定义)

    我有点困惑 让我们创建一个名为 x 的函数 我知道通过在 y 之前添加 这意味着我们可以添加任意数量的参数 def x y return y 然而 Case 1 gt gt gt x 1 2 1 2 Case 2 让我们传递一个前面带有星号