python - 在函数定义中正确使用 lambda

标签 python string lambda python-3.4

我想写一个简单的函数来识别 palindromes :

>>> def palindrome(s):
    return s == s[::-1]

它工作正常,但区分大小写,我可以解决这个问题:

>>> def palindrome(s):
    return s.lower() == s[::-1].lower()

>>> palindrome('Aba')
True

但我认为它不是很优雅。我尝试使用 lambda 表达式将输入小写,但我做错了,不知道如何解决:

>>> def palindrome(lambda s : s.lower()):
    return s == s[::-1]
SyntaxError: invalid syntax

最佳答案

您不能使用 lambda 表达式来描述应该对输入参数执行的操作(但是您可以使用 lambda 来定义默认值)。你可以做两件事:

  • 在函数头部定义一个函数:

    def palindrome(s):
        s = s.lower()
        return s == s[::-1]
    
  • 使用装饰器:

    def caseinsensitive(f):
        def helper(s):
            s = s.lower()
            return f(s)
        return helper
    

    然后将您的回文定义为:

    @caseinsensitive
    def palindrome(s):
        return s == s[::-1]
    

    在这里,您可以重用 @caseinsensitive 来定义执行此操作的所有函数,作为第一步。

关于python - 在函数定义中正确使用 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689153/

相关文章:

python - 使用 lambda、map 和 list 时,如果 Boolean 为 True,如何返回以下位置的列表?

android - 在Android中将字符串转换为 double

amazon-web-services - 从 AWS Lambda 发送 RabbitMQ 消息

c - 返回字符串的函数不工作 - 段错误

c - 从具有意外长度的函数返回字符串?

c# - 在 SQL Server 上筛选 Entity Framework 结果

c# - 为什么我不能使用 Lambda 表达式取消订阅事件?

python - 清理数据 : How to iterate through a list find if item contains a string, 空白或空白并在 Python 中删除该项目

python - 石头剪刀布返回问题

运行单个测试的 Python 测试 fixture ?