これはPythonでのゴルフのヒントの質問です。
Pythonゴルフでは、提出がラムダとして定義された関数であることが一般的です。例えば、
f=lambda x:0**x or x*f(x-1)
ラムダ形式には2つの大きな利点があります。
f=lambda x:...
またはのボイラープレートはlambda x:...
、def f(x):...return...
またはx=input()...print...
- 再帰呼び出しを使用すると、ほとんどバイトのオーバーヘッドなしでループできます。
ただし、ラムダには、単一の式のみを許可し、ステートメントを許可しないという大きな欠点があります。特に、これはのような割り当てがないことを意味しc=chr(x+65)
ます。値を2回(またはそれ以上)参照する必要がある長い式がある場合、これは問題になります。
のような割り当てE=enumerate
は、関数の外部またはオプションの引数として可能ですが、関数の入力に依存しない場合のみです。定義時に評価されるときにf=lambda n,k=min(n,0):...
入力n
が定義されていないため、fail などのオプションの引数k
。
その結果、代替が長い非ラムダであるために、ラムダで長い式を繰り返して吸い込むことがあります。
lambda s:s.strip()+s.strip()[::-1]
def f(s):t=s.strip();print t+t[::-1]
損益分岐点は約11文字(詳細)で、これを超えるとdef
またはに切り替わりますprogram
。これを繰り返し式の長さ5の通常の損益分岐点と比較します。
range(a)+range(b)
r=range;r(a)+r(b)
print s[1:],s[1:]*2
r=s[1:];print r,r*2
他の言語には、Octaveなどの回避策があります。Pythonには既知のトリックがありますが、それらは長く、不格好で、使用が制限されています。ラムダでの割り当てをシミュレートするための短く汎用的な方法は、Pythonゴルフに革命をもたらします。
Pythonゴルファーがこの制限を克服または回避する方法は何ですか?ラムダで長い表現が2回繰り返されるのを見るとき、彼らはどんな潜在的なアイデアを念頭に置くべきですか
このヒントの質問の私の目標は、この問題を深く掘り下げることです。
- ゴルフの回避策をカタログ化して分析し、ラムダ内の偽の割り当て
- より良い方法のための新しいリードを探る
各回答では、回避策または潜在的なリードを説明する必要があります。
lambda s:(s+s[::-1]).lower()
ます。もちろん、これは実際の質問には答えません。
strip
。