猿问

产生 SyntaxError 的 Lambda 表达式

我正在寻找一个lambda表达式来打印整数,如果给定的字符串在给定的句子中以分隔/。这是我写的声明:


hunter = udf(lambda x : 'opened' in x.lower().split() print(10) elif 'clickedurl' in x.lower().split() print(20)  else print("null"))

s= it/is/opened/memory/tae

hunter(s)

我收到以下错误


 File "/home/main.py", line 1                                                                                         

    hunter = udf(lambda x : 'opened' in x.lower().split() print(10) elif 'clickedurl' in x.lower().split() print 20  el

se print("null"))                                                                                                      

                                                              ^                                                        

SyntaxError: invalid syntax 


一只萌萌小番薯
浏览 125回答 1
1回答

慕尼黑的夜晚无繁华

您的代码中有多个语法错误,您必须修复所有这些错误。首先,lambda像所有表达式一样,表达式中不能包含任何语句,而只能是表达式。其中包括print您似乎正在使用的Python 2语句。如果要编写包含语句的函数,则需要使用def语句,而不是lambda表达式。其次,如果你试图写一个if-else表达式,你的语法是错误的。您需要先放置真表达式,然后是if,然后是要检查的条件,然后是else,然后是假表达式。您似乎一直在尝试将条件放在true表达式的正前方:'opened' in x.lower().split() print(10)你不能那样做。这就是你的第一个SyntaxError,你问的那个,来自哪里。第三,您不能elif在if-else表达式中使用。您必须将其写入if-else另一个if-else表达式作为假值的表达式中。这看起来很可怕。如果您发现自己需要这样做,则几乎可以肯定地想将其分解为一条if语句。同样,尽管这不是非法的,但使用表达式来产生副作用是高度误导的if-else。if-else表达式是关于选择一个值或另一个值,而不是在运行一组副作用或另一组副作用。如果后者是你想要的,你需要一个if声明。的确如此lambda。那是关于定义计算值的函数;仅因其副作用而被调用的函数几乎总是应该为def。因此,您想要的是:def thingy(x):    if 'opened' in x.lower().split():        print(10)    elif 'clickedurl' in x.lower().split():        print(20)    else:        print('null')hunter = udf(thingy)请注意,这使您有机会通过避免一些重复来改进事物(可读性和性能):def thingy(x):    words = x.lower().split()    if 'opened' in words:        print(10)    elif 'clickedurl' words:        print(20)    else:        print('null')尽管您当然不希望使用像x和这样的名称thingy。我不知道这些东西代表什么,但是可以肯定的是。最后,我不知道那个udf函数是什么,但我无法想象它在使用总是返回的函数调用时返回任何有用的东西None,所以我敢打赌你还有更多的问题,但希望你能解决它们从这里。当然,一旦你修复了所有这些,下一行也是一个语法错误:s= it/is/opened/memory/tae这是试图划分一堆东西。即使it,opened,memory,并tae与相关的值的所有变量,is当然不是,因为它是一个内置的操作,所以你不能用它除以任何东西。你可能想要一个字符串在这里。此外,因为您在split()没有任何参数的情况下调用,所以只会拆分由空格分隔的内容。所以,要么你想要split('/')上面,要么你想要这里的空白。所以:s = 'it is opened memory tae'如果你真的想制作这个巨大的表情,这是可能的,但它会非常非常难看。首先,您必须print用函数调用替换该语句。当然可以from __future__ import print_function,但是否则,您需要编写一个可以执行所需功能的函数,或者使用已经存在的函数。其次,您要么需要一个if-else内部if-elseas作为该函数的参数,要么需要在一个if-else中的an的每个分支中调用该函数if-else。我认为第一个不太可怕。所以:lambda x: sys.stdout.write(    str(10 if 'opened' in x.lower().split() else (             20 if 'clickedurl' in x.lower().split() else 'null'))    + '\n')当然,在表达式中,空格无关紧要,因此您可以根据需要自由地将其重写为更丑陋:lambda x:sys.stdout.write(str(10 if 'opened' in x.lower().split() else(20 if 'clickedurl' in x.lower().split() else 'null'))+ '\n')… 或者:lambda x: sys.stdout.write(str       (10   if 'opened' in x.            lower           (         ).     split() else (20   if 'clickedurl' in x.lower().split() else 'null'))+ '\n')我无法想象你为什么想要后者,但是后来我无法想象你为什么想要前者,但是你似乎正在尝试写尽可能多的东西,所以……它。
随时随地看视频慕课网APP

相关分类

Python
我要回答