问题标签 [argument-unpacking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
529 浏览

python - 使用列表理解python解包字符串

我得到了以下代码。

所以手现在是一个字符串列表 ['6C', '7C', '8C', '9C', 'TC']

然后

行列现在是[6, 7, 8, 9, 10]

目的是为卡片的等级提供适当的数值以允许对其进行排序:即'T'->10、'J'->11、'Q'-12、'K'->13 和'A'->14 .

我不明白为什么它有效!

  • 从列表中获取项目是list[item]
  • 对字符串进行切片是"string"[0]

我在排名列表理解中看不到它。

谢谢!

0 投票
1 回答
244 浏览

c++ - 带有向下转换的 std::pair 分配

对于事件反应器和前摄器中的超时,我使用优先级队列,它还允许 O(log(n)) 随机访问删除事件(当事件发出信号/完成而不是发生超时时)。我存储std::pair<std::chrono::steady_clock::time_point, Timed *>whereTimed是一个添加了一个索引(指向队列)的类,以便在调用TimedQ::Remove(Timed *p). 当我想要一个与超时关联的事件类型时,我从Timed. 队列的Top()Pop()返回一对。

我曾经有一堆使用队列的代码,例如

Timed *在我开始在队列中使用基类而不是特定事件类型(即Timed最初是模板类型)之前,它工作得很好,因为我最终需要支持可以与超时相关联的多种不同事件类型。但是,eventPtr*由于是派生类型(我可以static_castTimed *队列返回的 a 中获取),上述代码不再有效。

我想知道最好的方法是什么。现在,它最终变得非常冗长,我也担心创建临时工等效率:

我唯一的另一个想法是对派生事件类返回一对的函数进行模板化,但从代码大小的角度来看,这似乎很糟糕,因为即使机器代码应该相同,也会创建这些函数的多个实例,因为在所有情况下,它都是一个存储的指针。


编辑: 我也尝试过使用它,它可以编译,但我不确定它是否正确或有效:

最初的例子会变成

0 投票
5 回答
5453 浏览

python - Python 关键字参数解包并返回字典

我有一个如下的函数定义,并且我正在传递关键字参数。如何返回与关键字参数同名的字典?

手动我可以这样做:

但我不想那样做。有什么方法可以让我在不实际输入字典的情况下完成这项工作?

0 投票
2 回答
265 浏览

javascript - Javascript:function.prototype.bind() 中的参数解包?

我见过的最接近的是这个,但它并没有真正帮助我,因为我需要绑定一些参数以供以后使用 setInterval

进一步来说:

可以看出,数组是用 解包的.apply(),但不是用.bind(). 有没有办法用 解包参数.bind()

0 投票
1 回答
109 浏览

python - argspec 中的元组解包

我已经使用 python2 多年了,甚至不知道这个特性,但函数 defs 显然支持元组解包:

默认值也是允许的,尽管它们似乎是在函数调用时而不是函数定义时解包的。而且我无法弄清楚如何按名称传递一个/任何/所有打包参数,也许这是不可能的。

这显然不仅仅是一个奇怪的实现细节:如果您仔细阅读语法,特别是 anfpdef是什么,您会发现函数定义是为元组解包而明确设计的。

我的问题是,为什么这是一个设计选择,什么是必要的示例用例?对我来说,这似乎是一个晦涩且容易出错的功能,它违反了 python 1、2、3、5、7、9、13、17....

0 投票
1 回答
364 浏览

python - 是否有更好(即更 Pythonic)的方法来处理打包/解包函数参数?

我正在编写一种向对象“添加刻度”的方法。(“添加刻度”的含义对我的问题无关紧要。您也可以忽略我的代码示例中的 'batch' 变量。)所有刻度都将具有相同的宽度和长度,但位于不同的刻度位置,并且有每次调用可以是可变数量的滴答声。目前我的方法如下所示:

当我这样称呼它时,这很好用:

但是当我想在从 0 到 59 的所有整数位置添加刻度时,我不想输入所有数字。目前我这样称呼它:

即我创建一个范围,通过列表理解将其转换为列表,然后在调用时解压缩该列表,以便该方法可以将其作为元组接收。它可以工作,但它看起来有点混乱,可能会让其他阅读代码的人感到困惑。

我的问题是:

  1. 有经验的 Python 程序员会不会像我一样绊倒这种结构?
  2. 有没有更好的方法来达到同样的效果?
  3. 我应该更改方法的签名吗?我知道我可以用 替换*tickstickList但是每次我调用它时,我都必须将刻度值包含在一个列表中,这对我来说似乎更嘈杂。

(这适用于 Python 2.7)


编辑:用户怪异的给了我 *range(0,60) 有效的答案。我可以看到它有效,但现在我意识到我不知道如何描述它。我们已经“解压了一个迭代器”,但这给了我们什么?它不是一个列表,也不是一个元组。我们只是说“迭代器的元素吗?(我可以编写 Python 好的,我只是很难说)。


编辑:好的,我已经切换到一个列表(并停止拆开我的宽度,长度对),我的方法现在看起来像这样

这意味着我现在这样称呼它:

我最初的直觉是创建一个超出范围的列表,但我想这是 Pythonic 意识到rangeiterable 和列表一样好,所以我们可以直接传递它?

0 投票
2 回答
110 浏览

f# - 如何将 seq 中的 x 的 x 转换为 seq

这是此SO-post的后续问题。

给定这段代码(csvData1 是一个 .csv 文件。)

如果我不想将序列的每个元素解压缩到x第二个 val 中,我们可以调用y. 如何转换x为序列,以便可以使用Seq.fstand Seq.snd

我知道可以解开这些元素。我的问题是寻找另一种方法来做到这一点,特别是考虑到这x是一个 System.Tuple。

0 投票
3 回答
176 浏览

python - 使用 Python3.5 中的 Unpacking Generalizations 合并 python3 中的两个 dic

下面有两个字典我想合并它们,我的意思是选择那些我感兴趣的键,例如我对除县以外的所有键感兴趣。我使用的解决方案是del在创建新字典后使用函数,但是我确信有更多方法对我的解决方案更有效。如何在没有使用UNPACKING ARGUMENT的 del 函数的情况下解决这个问题。

讨论后,

此命令适用于 3.5.1,

0 投票
1 回答
2354 浏览

python - 如何重载 * 参数解包运算符?

我有类似的数据data = [[t1, t2, ...], [v1, v2, ...]]。我想将它包装在一个类中,这样我就可以调用data.t而不必使用data[0].

我试图用以下方法做到这一点:

__getitem__和重载的原因__setitem__是为了向后兼容,所以它data[0]仍然有效。这适用于大多数事情,但是我遇到了以下调用的问题:

我得到的错误是

如何使用参数解包运算符使我的类正常工作?

0 投票
2 回答
457 浏览

python - 为什么 Python 解包运算符适用于无序集合

关于解包运算符 ( )的Python 3 教程*一般说的是“列表或元组”,而错误使用的错误消息说需要一个“序列”:

Python 3 的内置类型文档列出了以下序列类型:

  • 序列类型 - list, tuple,range
  • 文本序列类型 —str
  • 二进制序列类型 - bytes, bytearray,memoryview

快速测试:

请注意,此处包括集合类型(如setfrozenset)和映射类型(dict) 。


我的问题:为什么所有可迭代类型(包括 asetdict)都是不可打包的?它们不是序列类型,正如TypeError上面所暗示的那样,当为位置参数解包时,无序行为会导致未定义的结果: