Python一行函数定义



这必须很简单,但作为一个偶尔使用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'结尾时运行

最新更新