这一定很简单,但作为偶尔使用的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:可以是一行或两行,具有简单的主体,但两者结合失败。 是否有排除此的语法规则?
答案 0 :(得分:30)
是的,有限制。不,你做不到。简而言之,您可以跳过一个换行而不是两个换行。 : - )
请参阅http://docs.python.org/2/reference/compound_stmts.html
原因是它允许你做
if test1: if test2: print x
else:
print y
哪个含糊不清。
答案 1 :(得分:24)
如果必须只有一行,只需将其设为lambda
:
perms = lambda xs: (list(x) for x in itertools.permutations(xs))
通常情况下,如果您有一个用于生成数据的简短for
循环,则可以将其替换为列表推导或生成器表达式,以便在相同的空间内获得大致相同的易读性。
答案 2 :(得分:2)
def perms(xs):
for itertools.permutations(xs)中的x:yield list(x)
您可以使用exec()
来解决此问题
exec('def perms (xs):\n for x in itertools.permutations(xs):\n yield list(x)\n')
注意在\ n 之后插入indense空格或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')
This is My project on GitHub使用exec以交互式控制台模式运行Python程序
*注意多行exec仅在以'\ n'
结尾时运行答案 3 :(得分:0)
对于您而言,我不确定。但是,通过某些功能,您可以使用分号来实现。
>>> def hey(ho): print(ho); print(ho*2); return ho*3
...
>>> hey('you ')
you
you you
'you you you '