1 回答
TA贡献1864条经验 获得超6个赞
您的代码中有多个语法错误,您必须修复所有这些错误。
首先,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')
我无法想象你为什么想要后者,但是后来我无法想象你为什么想要前者,但是你似乎正在尝试写尽可能多的东西,所以……它。
添加回答
举报