Python中的单行条件(C ++风格)

时间:2017-09-03 00:18:01

标签: python lambda conditional

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

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

现在我有一个简单的主要功能:

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相同的行中。

任何帮助,选项,替代考虑因素? BTW:我编写了这个简单的程序来检查这个功能,以减少更大模块的逻辑尺寸。我非常清楚,我可以在isPalindrome函数中检查它是否是一个回文。这不是我的问题。

2 个答案:

答案 0 :(得分:3)

你绝对可以将你的条件放在一条线上。这就是你在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))

答案 1 :(得分:-1)

我希望他的解释对你有帮助。来自doc

  

lambda_expr :: =“lambda”[parameter_list]:表达式

     

lambda_expr_nocond :: =“lambda”[parameter_list]:expression_nocond

     

Lambda表达式(有时称为lambda表单)用于创建   匿名函数。表达式lambda arguments:expression   产生一个功能对象。未命名的对象就像一个函数   对象定义为:

     

def(参数):       返回表达式

因此,您必须将表达式传递给lambda。 Conditional expressions(使用if / else关键字)是有效的表达式。你不能只传递if/else句子。有效的代码可以是:

{{1}}