我试图在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
函数中检查它是否是一个回文。这不是我的问题。
答案 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}}