![](/img/trans.png)
[英]What are the advantages/disadvantages of using Jython/IronPython/Pyjamas?
[英]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.