【问题标题】:One-line conditionals in Python (C++ style)Python 中的单行条件句(C++ 风格)
【发布时间】:2018-02-11 15:25:10
【问题描述】:

我尝试在 Python 中复制 C++ 风格的单行条件,如下所示:

我定义了一个函数:isPalidrome (mystr) - 如果mystr 是回文,则返回True,否则返回False。该功能有效。

现在我有一个简单的 main 函数,如下所示:

mystr =''
isitapalindromealready = lambda : if isPalindrome(mystr) ==True:    return "" else return 'not'
while mystr != 'quit':
    mystr = input("enter a string: ")
    print  ('{} is {} a palindrome'.format(mystr, isitapalindromealready())

但我得到一个语法错误 -

  File "scratch1.py", line 45
    isitapalindromealready = lambda : if isPalindrome(mystr) ==True:    return "" else return 'not'
                                       ^
SyntaxError: invalid syntax

我确实检查了一个类似的线程,该线程非常接近于复制我上面的逻辑(它只是不会在任何地方将 lambda 作为函数调用)。

Conditional statement in a one line lambda function in python?

但是,没有一个答案可以解释为什么它是语法错误。如果您忽略 PEP 8,则语法是有效的,除非您不能将 else 包含在与 if 相同的行中。

任何帮助、选项、替代注意事项? 顺便说一句:我编写了这个简单的程序来检查这个特性,以减少更大模块的逻辑大小。我很清楚,我可以在isPalindrome 函数中检查它是否是回文。那不是我问题的重点。

【问题讨论】:

标签: python lambda conditional


【解决方案1】:

您绝对可以将条件放在一行中。这就是你在 python 中的做法。

isitapalindromealready = lambda x: "" if isPalindrome(x) else "not"

当然,您可以让 lambdas 与全局变量一起使用,但我不建议这样做。一个写得很好的 lambda 应该是一个纯函数,这意味着您可以将参数传递给它。此外,lambda 不需要 return,因为它是隐含的。现在,你必须这样调用你的 lambda:

isitapalindromealready(mystr)

isitapalindromealready = lambda x: "" if isPalindrome(x) else "not"
while mystr != 'quit':
    mystr = input("enter a string: ")
    print  ('{} is {} a palindrome'.format(mystr, isitapalindromealready(mystr))

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 2020-10-05
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    相关资源
    最近更新 更多