簡體   English   中英

如果和內聯如果,有哪些優缺點?

[英]If and Inline if, what are the advantages and disadvantages?

我對Python中的if和inline之間的區別有點好奇。 哪一個更好?

是否有任何理由使用內聯 ,除了它更短的事實?

此外,這個陳述有什么問題嗎? 我收到語法錯誤: SyntaxError: can't assign to conditional expression

a = a*2 if b == 2 else a = a/w

內聯if表達式的優點是它是一個表達式,這意味着你可以在其他表達式 - 列表推導,lambda函數等中使用它。

內聯if表達式的缺點在於它是一個表達式,這意味着你不能在其中使用任何語句。


缺點的一個完美示例正是導致錯誤的原因: a = a/w是一個語句,因此您無法在表達式中使用它。 你必須這樣寫:

if b == 2:
    a = a*2
else:
    a = a/w

除此之外,在這種特殊情況下,你只是想分配的東西給a在任何情況下,所以你可以這樣寫:

a = a*2 if b==2 else a/w

至於優勢,請考慮這個:

odd_numbers = [number if number%2 else number+1 for number in numbers]

如果沒有if表達式,你必須將條件包裝在一個命名函數中 - 這對於非平凡的情況是一件好事,但在這里過於冗長:

def oddify(number):
    if number%2:
        return number
    else:
        return number+1
odd_numbers = [oddify(number) for number in numbers]

另請注意,以下示例使用if (三元條件)表達式,而是if (條件過濾器)子句:

odd_numbers = [number for number in numbers if number % 2]

使用條件表達式的正確方法是:

result = X if C else Y

你有什么:

result = X if C else result = Y

所以,你應該從那里刪除result = part。 條件表達式的主要優點是,它是一個表達式 你可以在任何使用普通表達式的地方使用它們,作為賦值表達式的RHS,作為方法/函數參數,在lambdas中,在列表理解中,等等。 但是,你不能只在其中添加任何語句,比如說print語句。

例如,假設您想要列表中的所有偶數整數,但對於所有奇數,您希望值為0 您可以在列表理解中使用它,如下所示:

result = [x if x % 2 == 0 else 0 for x in li]

內聯if是一個表達式,所以你不能把賦值放在里面。

正確的語法是:

a = a*2 if b == 2 else a/w

至於實用性,這是一個風格問題,對程序員StackExchange來說 ,這可能是個好問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM