Questions tagged «iterable-unpacking»

一种Python功能,其中可迭代元素同时分配给多个变量,例如a,b,c = [1、2、3]。


8
“解包”一个元组以调用匹配的函数指针
我正在尝试存储std::tuple各种数量的值,这些值稍后将用作与存储类型匹配的函数指针的调用的参数。 我创建了一个简化的示例,显示了我正在努力解决的问题: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template <typename ...Args> struct save_it_for_later { std::tuple<Args...> params; void (*func)(Args...); void delayed_dispatch() { // How can I "unpack" params to call func? …




6
地图操作中的元组拆箱
我经常发现自己正在使用元组的列表,序列和迭代器,并且希望执行以下操作, val arrayOfTuples = List((1, "Two"), (3, "Four")) arrayOfTuples.map { (e1: Int, e2: String) => e1.toString + e2 } 但是,编译器似乎从未同意这种语法。相反,我最终写了, arrayOfTuples.map { t => val e1 = t._1 val e2 = t._2 e1.toString + e2 } 真是愚蠢。我该如何解决?

1
Python元组在return语句中解包
Python语言(尤其是3.x)允许非常广泛地拆解可迭代对象,其中一个简单的示例是 a, *rest = 1, 2, 3 多年来,这种拆包已逐渐普及(例如参见PEP 3132和PEP 448),从而使其可以在越来越多的情况下使用。因此,我很惊讶地发现以下内容在Python 3.6中是无效的语法(在Python 3.7中仍然如此): def f(): rest = [2, 3] return 1, *rest # Invalid 我可以通过将返回的元组封装在括号中来使其工作,如下所示: def f(): rest = [2, 3] return (1, *rest) # Valid 我在return声明中使用它的事实似乎很重要,因为 t = 1, *rest 确实是合法的,并且在带括号和不带括号的情况下都相同。 Python开发人员只是忘记了这种情况,还是有任何原因使这种情况成为无效语法? 我为什么在乎 这打破了我以为我与Python语言达成的一项重要合同。考虑以下(也是有效的)解决方案: def f(): rest = [2, 3] …

7
为什么Scala的元组语法如此不寻常?
在数学和计算机科学中,元组是元素的有序列表。在集合论中,(有序的)n元组是n个元素的序列(或有序列表),其中n是正整数。 因此,例如,在Python中,可以通过访问元组的第二项t[1]。 在Scala中,只能通过奇怪的名称进行访问t._2。 所以问题是,为什么不能按定义访问序列或列表中的元组数据?是否有某种主意或尚未检查?

4
了解* x,= lst
我正在阅读一些旧代码,试图了解它的作用,并且遇到了这个奇怪的陈述: *x ,= p p在这种情况下是一个列表。我一直在努力弄清楚该语句的作用。据我所知,它只是设置x为的值p。例如: p = [1,2] *x ,= p print(x) 只是给 [1, 2] 那么这有什么不同x = p吗?知道这个语法在做什么吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.