36

これは単純でなければなりませんが、たまにしか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) 

1 行関数の構文に制限はありますか? 本文の定義 (for...) は、それ自体で 2 行または 1 行のいずれかであり、def: は単純な本文で 1 行または 2 行にすることができますが、2 つを組み合わせると失敗します。これを除外する構文規則はありますか?

4

4 に答える 4

52

1行にする必要がある場合は、次のようにしlambdaます。

perms = lambda xs: (list(x) for x in itertools.permutations(xs))

多くの場合、forデータを生成するための短いループがある場合、それをリスト内包表記またはジェネレーター式のいずれかに置き換えると、わずかに少ないスペースでほぼ同じ可読性が得られます。

于 2013-05-26T04:19:39.207 に答える
3

デフォルトパーマ (xs):

for x in 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) を挿入するように注意してください

1 行の if 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 プログラムを実行します。

*「\n」で終わる場合にのみ複数行の実行が実行されることに注意してください

于 2015-04-07T03:07:44.833 に答える