python一行函数定义

时间:2013-05-26 04:12:24

标签: 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:可以是一行或两行,具有简单的主体,但两者结合失败。 是否有排除此的语法规则?

4 个答案:

答案 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 '