第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

產(chǎn)生 SyntaxError 的 Lambda 表達(dá)式

產(chǎn)生 SyntaxError 的 Lambda 表達(dá)式

一只萌萌小番薯 2021-05-30 00:15:44
我正在尋找一個lambda表達(dá)式來打印整數(shù),如果給定的字符串在給定的句子中以分隔/。這是我寫的聲明: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/taehunter(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  else print("null"))                                                                                                                                                                    ^                                                        SyntaxError: invalid syntax 
查看完整描述

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')

我無法想象你為什么想要后者,但是后來我無法想象你為什么想要前者,但是你似乎正在嘗試寫盡可能多的東西,所以……它。


查看完整回答
反對 回復(fù) 2021-06-01
  • 1 回答
  • 0 關(guān)注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號