问题标签 [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.
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]
我在排名列表理解中看不到它。
谢谢!
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_cast
从Timed *
队列返回的 a 中获取),上述代码不再有效。
我想知道最好的方法是什么。现在,它最终变得非常冗长,我也担心创建临时工等效率:
我唯一的另一个想法是对派生事件类返回一对的函数进行模板化,但从代码大小的角度来看,这似乎很糟糕,因为即使机器代码应该相同,也会创建这些函数的多个实例,因为在所有情况下,它都是一个存储的指针。
编辑: 我也尝试过使用它,它可以编译,但我不确定它是否正确或有效:
最初的例子会变成
python - Python 关键字参数解包并返回字典
我有一个如下的函数定义,并且我正在传递关键字参数。如何返回与关键字参数同名的字典?
手动我可以这样做:
但我不想那样做。有什么方法可以让我在不实际输入字典的情况下完成这项工作?
javascript - Javascript:function.prototype.bind() 中的参数解包?
我见过的最接近的是这个,但它并没有真正帮助我,因为我需要绑定一些参数以供以后使用 setInterval。
进一步来说:
可以看出,数组是用 解包的.apply()
,但不是用.bind()
. 有没有办法用 解包参数.bind()
?
python - argspec 中的元组解包
我已经使用 python2 多年了,甚至不知道这个特性,但函数 defs 显然支持元组解包:
默认值也是允许的,尽管它们似乎是在函数调用时而不是函数定义时解包的。而且我无法弄清楚如何按名称传递一个/任何/所有打包参数,也许这是不可能的。
这显然不仅仅是一个奇怪的实现细节:如果您仔细阅读语法,特别是 anfpdef
是什么,您会发现函数定义是为元组解包而明确设计的。
我的问题是,为什么这是一个设计选择,什么是必要的示例用例?对我来说,这似乎是一个晦涩且容易出错的功能,它违反了 python 1、2、3、5、7、9、13、17....
python - 是否有更好(即更 Pythonic)的方法来处理打包/解包函数参数?
我正在编写一种向对象“添加刻度”的方法。(“添加刻度”的含义对我的问题无关紧要。您也可以忽略我的代码示例中的 'batch' 变量。)所有刻度都将具有相同的宽度和长度,但位于不同的刻度位置,并且有每次调用可以是可变数量的滴答声。目前我的方法如下所示:
当我这样称呼它时,这很好用:
但是当我想在从 0 到 59 的所有整数位置添加刻度时,我不想输入所有数字。目前我这样称呼它:
即我创建一个范围,通过列表理解将其转换为列表,然后在调用时解压缩该列表,以便该方法可以将其作为元组接收。它可以工作,但它看起来有点混乱,可能会让其他阅读代码的人感到困惑。
我的问题是:
- 有经验的 Python 程序员会不会像我一样绊倒这种结构?
- 有没有更好的方法来达到同样的效果?
- 我应该更改方法的签名吗?我知道我可以用 替换
*ticks
,tickList
但是每次我调用它时,我都必须将刻度值包含在一个列表中,这对我来说似乎更嘈杂。
(这适用于 Python 2.7)
编辑:用户怪异的给了我 *range(0,60) 有效的答案。我可以看到它有效,但现在我意识到我不知道如何描述它。我们已经“解压了一个迭代器”,但这给了我们什么?它不是一个列表,也不是一个元组。我们只是说“迭代器的元素吗?(我可以编写 Python 好的,我只是很难说)。
编辑:好的,我已经切换到一个列表(并停止拆开我的宽度,长度对),我的方法现在看起来像这样
这意味着我现在这样称呼它:
我最初的直觉是创建一个超出范围的列表,但我想这是 Pythonic 意识到range
iterable 和列表一样好,所以我们可以直接传递它?
f# - 如何将 seq 中的 x 的 x 转换为 seq
这是此SO-post的后续问题。
给定这段代码(csvData1 是一个 .csv 文件。)
如果我不想将序列的每个元素解压缩到x
第二个 val 中,我们可以调用y
. 如何转换x
为序列,以便可以使用Seq.fst
and Seq.snd
?
我知道可以解开这些元素。我的问题是寻找另一种方法来做到这一点,特别是考虑到这x
是一个 System.Tuple。
python - 使用 Python3.5 中的 Unpacking Generalizations 合并 python3 中的两个 dic
下面有两个字典我想合并它们,我的意思是选择那些我感兴趣的键,例如我对除县以外的所有键感兴趣。我使用的解决方案是del
在创建新字典后使用函数,但是我确信有更多方法对我的解决方案更有效。如何在没有使用UNPACKING ARGUMENT的 del 函数的情况下解决这个问题。
讨论后,
此命令适用于 3.5.1,
python - 如何重载 * 参数解包运算符?
我有类似的数据data = [[t1, t2, ...], [v1, v2, ...]]
。我想将它包装在一个类中,这样我就可以调用data.t
而不必使用data[0]
.
我试图用以下方法做到这一点:
__getitem__
和重载的原因__setitem__
是为了向后兼容,所以它data[0]
仍然有效。这适用于大多数事情,但是我遇到了以下调用的问题:
我得到的错误是
如何使用参数解包运算符使我的类正常工作?
python - 为什么 Python 解包运算符适用于无序集合
关于解包运算符 ( )的Python 3 教程*
一般说的是“列表或元组”,而错误使用的错误消息说需要一个“序列”:
Python 3 的内置类型文档列出了以下序列类型:
- 序列类型 -
list
,tuple
,range
- 文本序列类型 —
str
- 二进制序列类型 -
bytes
,bytearray
,memoryview
快速测试:
请注意,此处不包括集合类型(如set
和frozenset
)和映射类型(dict
) 。
我的问题:为什么所有可迭代类型(包括 aset
或dict
)都是不可打包的?它们不是序列类型,正如TypeError
上面所暗示的那样,当为位置参数解包时,无序行为会导致未定义的结果: