Mor*_*a R 3 python string lambda python-3.4
我想写一个识别回文的简单函数:
>>> def palindrome(s):
return s == s[::-1]
Run Code Online (Sandbox Code Playgroud)
它工作正常,但它区分大小写并修复我可以做的:
>>> def palindrome(s):
return s.lower() == s[::-1].lower()
>>> palindrome('Aba')
True
Run Code Online (Sandbox Code Playgroud)
但我觉得它不是很优雅.我尝试使用lambda表达式小写输入,但我做错了,不知道如何解决它:
>>> def palindrome(lambda s : s.lower()):
return s == s[::-1]
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
只需调用一次,将s重新分配给值并忘记lambda:
def palindrome(s):
s = s.lower()
return s == s[::-1]
Run Code Online (Sandbox Code Playgroud)
您不能使用lambda表达式来描述应对输入参数执行的操作(但您可以使用它lambda来定义默认值).你可以做两件事:
在函数的头部定义一个函数:
def palindrome(s):
s = s.lower()
return s == s[::-1]
Run Code Online (Sandbox Code Playgroud)使用装饰者:
def caseinsensitive(f):
def helper(s):
s = s.lower()
return f(s)
return helper
Run Code Online (Sandbox Code Playgroud)
然后定义你palindrome的:
@caseinsensitive
def palindrome(s):
return s == s[::-1]
Run Code Online (Sandbox Code Playgroud)
在这里,您可以重复使用的@caseinsensitive定义做这个作为第一步的所有功能.
这不是真正惯用的python,但你要找的是这样的:
def palindrome(s):
return (lambda x: x == x[::-1])(s.lower())
Run Code Online (Sandbox Code Playgroud)
也就是说,你定义一个lambda函数并立即调用它,绑定s.lower()到x.