这必须很简单,但作为一个偶尔使用python的用户,会遇到一些语法问题。如此:
def perms (xs):
for x in itertools.permutations(xs): yield list(x)
但是这不会解析:
def perms (xs): for x in itertools.permutations(xs): yield list(x)
对单行函数语法有一些限制吗?体定义(for…)本身可以是两行或一行,def可以是带有简单体的一行或两行,但将两者结合起来会失败。有没有排除这个的语法规则?
如果必须有一行,那就改成lambda
:
perms = lambda xs: (list(x) for x in itertools.permutations(xs))
通常,当您有一个用于生成数据的短for
循环时,您可以将其替换为列表推导式或生成器表达式,以在更少的空间中获得大致相同的可读性。
是的,有限制。不,你不能这么做。简单地说,您可以跳过一行换行,但不能跳过两行。
。
这样做的原因是它将允许您执行
if test1: if test2: print x
else:
print y
有歧义
对于你的情况,我不确定。但是对于某些函数,您可以通过使用分号来实现这一点。
>>> def hey(ho): print(ho); print(ho*2); return ho*3
...
>>> hey('you ')
you
you you
'you you you '
defperms (xs):
for x在itertools.permutations(xs): yield list(x)
你可以使用exec()
来解决这个问题
exec('def perms (xs):n for x in itertools.permutations(xs):n yield list(x)n')
注意在n
之后插入缩进空格或chr(9)Python一行示例
for i in range(10):
if (i==1):
print(i)
exec('for i in range(10)n if (i==1):n print(i)n')
这是我在GitHub上使用exec在交互式控制台模式下运行Python程序的项目
*注意多行exec只在以'n'结尾时运行