1. ホーム
  2. python

[解決済み] 複数のステートメントを1行にまとめるには?

2022-04-23 10:15:54

質問

この質問をどのようなタイトルで考えるべきか迷いましたが、コーディング・ゴルフは少し具体性に欠けるものの、適切なタイトルだと思います。

Pythonの内包は少し知っていますが、「読む」のはとても難しいようです。私が思うに、内包は次のコードと同じことを達成するかもしれません。

for i in range(10): if i == 9: print('i equals 9')

このコードは、現在の内包の仕組みよりもずっと読みやすくなっています。 : を1行にまとめると......これでは私も......。

私の質問です。

次のような例をONE LINEにする方法はないでしょうか?

try:
    if sam[0] != 'harry':
        print('hello',  sam)
except:
    pass

こんなのがあれば最高ですね。

try: if sam[0] != 'harry': print('hellp',  sam)
except:pass

しかし、またしても矛盾した : を実行する方法があれば、それも知りたいです。 try (またはそのようなもの) を使用せずに except を入れる必要があるのは、全く無意味なことのように思えます。 except:pass は、無駄な行です。

どのように解決するのですか?

残念ながら、あなたが望むことはPythonでは不可能です(そのため、Pythonはコマンドラインのワンライナープログラムにはほとんど役に立ちません)。括弧を明示的に使っても、構文例外を回避することはできません。セミコロンで区切られた単純な文の列であれば、回避できます。

for i in range(10): print "foo"; print "bar"

しかし、インデントされたブロックを導入するコンストラクトを追加するとすぐに ( if を使用すると、改行が必要になります。また

for i in range(10): print "i equals 9" if i==9 else None

は合法であり、あなたが望むものに近いかもしれません。

については try ... except のこと:全く意味がない なし その except . try は、"このコードを実行したいのですが、例外を投げるかもしれません"と言っています。例外を気にしないのであれば try . しかし、それを入れた途端に、「潜在的な例外を処理したい」と言うことになるのです。そのため pass で、具体的に処理しないことを希望していることになります。しかし、これはコードが実行され続けることを意味し、そうでなければ実行されません。