2

在 python 调试器或 django shell 中创建单行 for 循环很容易:

>>>> for x in (1,2,3,4):print(x);
>>>> for x in Obj.objects.all():something(x);

但是我怎样才能在那里获得第二个 for 循环呢?

>>>> for x in (1,2,3,4):print x;for y in (5,6):print x,y;
SyntaxError: invalid syntax

我很在意,因为在交互工作时,对前面的命令进行向上箭头编辑是很好的(这不是在任何其他上下文中使用单行命令的尝试)。

注意:“打印”只是一个例子。在实际使用中,我会迭代对象或执行其他编程或调试任务,例如“for s in Section.objects.all():for j in s.children():print j”。我正在使用 Python 2.7。

4

3 回答 3

6

对于列表理解无法做到的时代

for x in (1,2,3,4):print x;exec("for y in (5,6):print x,y;")

或者

for s in Section.objects.all():exec("for j in s.children():print j")

有时您可以像这样使用itertools.product(但无法获得print x

for x, y in itertools.product((1,2,3,4), (5,6)):print x,y)
于 2013-10-22T06:31:54.957 回答
3

列表理解可用于实现您想要的。你想要东西是不可能的。

>>> [(x, y) for x in (1, 2, 3, 4) for y in (5, 6)]
[(1, 5), (1, 6), (2, 5), (2, 6), (3, 5), (3, 6), (4, 5), (4, 6)]

相关:单行嵌套 For 循环

于 2013-10-22T06:30:48.823 回答
0

你最终可以把命令放在第一位。例如。

>>> [print("hi") for x in (1, 2, 3, 4) for y in (5, 6)]

但是,您确实遇到了一个问题。除非你想在一开始就调用一个函数,否则我不相信有办法。例如。

>>> [doSomething(x, y) for x in (1, 2, 3, 4) for y in (5, 6)]
于 2013-10-26T03:31:12.707 回答