这是使用Python打高尔夫球的提示问题。
在Python打高尔夫球中,提交通常是定义为lambda的函数。例如,
f=lambda x:0**x or x*f(x-1)
lambda格式有两个主要优点:
f=lambda x:...
或的样板lambda x:...
比def f(x):...return...
或短x=input()...print...
- 可以使用递归调用以很少的字节开销进行循环。
但是,lambda具有一个很大的缺点,即只允许一个表达式,没有语句。特别是,这意味着没有类似的分配c=chr(x+65)
。当一个人有一个长表达式需要将其值引用两次(或更多)时,这是有问题的。
类似E=enumerate
的赋值可以在函数外部或作为可选参数,但前提是它们不依赖于函数输入。可选参数f=lambda n,k=min(n,0):...
失败,因为n
在定义时k
评估输入时尚未定义输入。
结果是有时您会因为在lambda中重复一个长表达式而感到厌烦,因为替代方案是一个较长的非lambda。
lambda s:s.strip()+s.strip()[::-1]
def f(s):t=s.strip();print t+t[::-1]
收支平衡点约为11个字符(详细信息),超过此字符您将切换到a 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技巧,但它们使用时间长,笨拙和/或用途有限。一种用于在lambda中模拟分配的简短通用方法将彻底改变Python高尔夫。
Python高尔夫球手有哪些方法可以克服或解决此限制?当他们看到一个长表达式在lambda中重复两次时,他们应该想到什么潜在的想法?
我的这个提示问题的目标是深入研究此问题,并:
- 编目并分析高尔夫变通方法以在lambda中进行假分配
- 探索新的线索以寻求更好的方法
每个答案都应说明解决方法或潜在的领先优势。
lambda s:(s+s[::-1]).lower()
。当然,这并不能回答实际问题。
strip
。