1 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個贊
您的代碼中有多個語法錯誤,您必須修復(fù)所有這些錯誤。
首先,lambda像所有表達(dá)式一樣,表達(dá)式中不能包含任何語句,而只能是表達(dá)式。
其中包括print您似乎正在使用的Python 2語句。
如果要編寫包含語句的函數(shù),則需要使用def語句,而不是lambda表達(dá)式。
其次,如果你試圖寫一個if-else表達(dá)式,你的語法是錯誤的。您需要先放置真表達(dá)式,然后是if,然后是要檢查的條件,然后是else,然后是假表達(dá)式。
您似乎一直在嘗試將條件放在true表達(dá)式的正前方:
'opened' in x.lower().split() print(10)
你不能那樣做。這就是你的第一個SyntaxError,你問的那個,來自哪里。
第三,您不能elif在if-else表達(dá)式中使用。您必須將其寫入if-else另一個if-else表達(dá)式作為假值的表達(dá)式中。
這看起來很可怕。如果您發(fā)現(xiàn)自己需要這樣做,則幾乎可以肯定地想將其分解為一條if語句。
同樣,盡管這不是非法的,但使用表達(dá)式來產(chǎn)生副作用是高度誤導(dǎo)的if-else。if-else表達(dá)式是關(guān)于選擇一個值或另一個值,而不是在運(yùn)行一組副作用或另一組副作用。如果后者是你想要的,你需要一個if聲明。
的確如此lambda。那是關(guān)于定義計算值的函數(shù);僅因其副作用而被調(diào)用的函數(shù)幾乎總是應(yīng)該為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)
請注意,這使您有機(jī)會通過避免一些重復(fù)來改進(jìn)事物(可讀性和性能):
def thingy(x):
words = x.lower().split()
if 'opened' in words:
print(10)
elif 'clickedurl' words:
print(20)
else:
print('null')
盡管您當(dāng)然不希望使用像x和這樣的名稱thingy。我不知道這些東西代表什么,但是可以肯定的是。
最后,我不知道那個udf函數(shù)是什么,但我無法想象它在使用總是返回的函數(shù)調(diào)用時返回任何有用的東西None,所以我敢打賭你還有更多的問題,但希望你能解決它們從這里。
當(dāng)然,一旦你修復(fù)了所有這些,下一行也是一個語法錯誤:
s= it/is/opened/memory/tae
這是試圖劃分一堆東西。即使it,opened,memory,并tae與相關(guān)的值的所有變量,is當(dāng)然不是,因?yàn)樗且粋€內(nèi)置的操作,所以你不能用它除以任何東西。
你可能想要一個字符串在這里。
此外,因?yàn)槟趕plit()沒有任何參數(shù)的情況下調(diào)用,所以只會拆分由空格分隔的內(nèi)容。所以,要么你想要split('/')上面,要么你想要這里的空白。
所以:
s = 'it is opened memory tae'
如果你真的想制作這個巨大的表情,這是可能的,但它會非常非常難看。
首先,您必須print用函數(shù)調(diào)用替換該語句。當(dāng)然可以from __future__ import print_function,但是否則,您需要編寫一個可以執(zhí)行所需功能的函數(shù),或者使用已經(jīng)存在的函數(shù)。
其次,您要么需要一個if-else內(nèi)部if-elseas作為該函數(shù)的參數(shù),要么需要在一個if-else中的an的每個分支中調(diào)用該函數(shù)if-else。我認(rè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')
當(dāng)然,在表達(dá)式中,空格無關(guān)緊要,因此您可以根據(jù)需要自由地將其重寫為更丑陋:
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')
我無法想象你為什么想要后者,但是后來我無法想象你為什么想要前者,但是你似乎正在嘗試寫盡可能多的東西,所以……它。
添加回答
舉報