在一行代码中使用python的if else语句

时间:2020-02-23 14:42:48  来源:igfitidea点击:

我如何在一行中编写一个简单的python?
什么是Python中的三元运算符?
我们可以对复杂的if和else语句使用一个衬里吗?

在本教程中,将介绍不同的示例,以理解和了解Python中是否存在条件的三元运算符的使用。
条件表达式(有时称为"三元运算符")在所有Python操作中具有最低的优先级。
从C,C ++或者Perl进入Python的程序员有时会错过所谓的三元运算符?:。
它最常用于避免几行代码和一个用于简单决策的临时变量。

我将不介绍通用三元运算符的细节,因为它在Python中用于循环和控制流语句。
其中我们将专注于使用三元运算符在一行中学习python(如果不是)

Python 在一行内的if else

语法

Python中单if和else语句的一般语法为:

if condition:
   value_when_true
else:
   value_when_false

现在,如果我们希望使用三元运算符将其编写为一行,则语法将是:

value_when_true if condition else value_when_false

用这种语法,首先要评估"其他条件"。

  • 如果条件返回" True",则返回" value_when_true"

  • 如果条件返回" False",则返回" value_when_false"

同样,如果我们根据条件在常规的" if else块"中分配了变量

if condition:
    value = true-expr
else:
    value = false-expr

可以用单行写成相同的内容:

value = true-expr if condition else false-expr

同样其中首先要评估条件。

  • 如果条件返回" True",则将" true-expr"分配给值对象

  • 如果条件返回" False",则将" false-expr"分配给值对象

对于像这样的简单情况,我发现能够以一行而不是四行来表示该逻辑非常好。
请记住,作为一名编码人员,我们花费的时间比编写代码要花费更多的时间,因此Python的简洁性是无价的。

要记住的一些重要点:

  • 我们可以在Python中使用三元表达式,但只能用于表达式,不能用于语句。

  • 我们不能在一行中使用Pythonif..elif..else块。

  • 三元这个名字意味着操作员只有三部分:conditionthenelse

  • 尽管有一些技巧可以将" if..elif..else块"修改为" if..else块",然后在单行中使用它,但这会因条件而复杂,应避免

  • 如果使用" if-else块",将仅执行其中一个表达式。

  • 总是使用三元表达式来压缩代码虽然很诱人,但要意识到,如果条件以及正确和错误的表达式非常复杂,则可能会牺牲可读性。

Python脚本示例

这是一个简单的脚本,我们在if条件中使用比较运算符

  • 首先收集整数形式的用户输入并将该值存储到b

  • 如果b大于或者等于0,则返回正数,这将是True条件。

  • 如果b返回False,即上述条件不成功,则返回负数

  • 最终的返回值,即正数或者负数,都存储在对象" a"中

  • 最后打印出值a的值

#!/usr/bin/env python3
b = int(input("Enter value for b: "))
a = "positive" if b >= 0 else "negative"
print(a)

此代码的多行形式为:

#!/usr/bin/env python3
b = int(input("Enter value for b: "))
if b >= 0:
   a = "positive"
else:
   a = "negative"
print(a)

输出:

# python3 /tmp/if_else_one_line.py
Enter value for b: 10
positive
# python3 /tmp/if_else_one_line.py
Enter value for b: -10
negative

Python一行代码内的 if..elif..else

现在,正如我之前所说的,不可能使用三元表达式在一行中使用" if..elif..else块"。
尽管我们可以"破解"这种方式,但是根据PEP-8指南,请确保Python中一行的最大允许长度为79

语法

我们有这个if..elif..else块,其中我们根据条件检查返回表达式:

if condition1:
    expr1
elif condition2:
    expr2
else:
    expr

我们可以使用以下语法在一行中编写该" if..elif..else"块:

expr1 if condition1 else expr2 if condition2 else expr

用这种语法,

  • 首先评估" condition2",如果返回" True",则返回" expr2"

  • 如果condition2返回False,则对condition1进行求值; True返回True,则返回expr1.

  • 如果condition1也返回False,则执行else并返回expr。

如我们所见,如果我们在多行if..elif..else块中阅读它,会更容易,而对于初学者来说,这变得很难理解。

我们可以在此语法中添加多个if else block,但我们还必须遵守PEP-8准则

expr1 if condition1 else expr2 if condition2 else expr-n if condition-n else expr

Python脚本范例1

在此示例脚本中,我们从最终用户那里收集一个整数值并将其存储在b中。
执行顺序为:

  • 如果b的值小于0,则返回neg

  • 如果" b"的值大于" 0",则返回pos。

  • 如果两个条件均返回False,则返回零

#!/usr/bin/env python3
b = int(input("Enter value for b: "))
a = "neg" if b < 0 else "pos" if b > 0 else "zero"
print(a)

该代码的多行形式为:

#!/usr/bin/env python3
b = int(input("Enter value for b: "))
if b < 0:
   a = "neg"
elif b > 0:
   a = "pos"
else:
   zero
print(a)

输出(当" if"条件为" True"时)

# python3 /tmp/if_else_one_line.py
Enter value for b: -5
neg

输出(当if条件为False和elif条件为True时)

# python3 /tmp/if_else_one_line.py
Enter value for b: 5
pos

输出(当if和elif条件均为False时)

# python3 /tmp/if_else_one_line.py
Enter value for b: 0
zero

Python脚本示例2

我们将在此示例脚本中添加更多其他块,检查的顺序如下:

  • 收集用户输入的值" b",该值将转换为整数类型

  • 如果b的值等于100,则返回100;如果返回False,则将执行下一个if else条件。

  • 如果b的值等于50,则返回50;如果返回False,则将执行下一个if else条件。

  • 如果b的值等于40则返回40,如果返回False则执行下一个if else条件。

  • 如果b的值大于100则返回大于100,如果b的值返回False则接下来转到else块

  • 最后,如果所有条件都返回" False",则返回小于百

#!/usr/bin/env python3
b = int(input("Enter value for b: "))
a = "equal to 100" if b == 100 else "equal to 50" if b == 50 else "equal to 40" if b == 40 else "greater than 100" if b > 100 else "less than 100"
print(a)

此示例的多行形式为:

#!/usr/bin/env python3
b = int(input("Enter value for b: "))
if b == 100:
   a = "equal to 100"
elif b == 50:
   a = "equal to 50"
elif b == 40:
   a = "equal to 40"
elif b > 100:
   a = "greater than 100"
else:
   a = "less than 100"
print(a)

输出:

# python3 /tmp/if_else_one_line.py
Enter value for b: 50
equal to 50
# python3 /tmp/if_else_one_line.py
Enter value for b: 110
greater than 100
# python3 /tmp/if_else_one_line.py
Enter value for b: -12
less than 100
# python3 /tmp/if_else_one_line.py
Enter value for b: 40
equal to 40

Python将if..else嵌套在一行中

我们还可以使用三元表达式在Python的一行上定义"嵌套的if..else块"。

语法

如果我们有使用nested if else block的多行代码,则如下所示:

if condition1:
    expr1
elif condition-m:
    expr-m
else:
    if condition3:
	   expr3
	elif condition-n:
	   expr-n
	else:
	   expr5

在Python中使用此"嵌套的if else块"的单行语法为:

expr1 if condition1 else expr2 if condition 2 else (expr3 if condition3 else expr4 if condition 4 else expr5)

其中我们使用"三元"表达式在" else块"中添加了嵌套的" if..elif..else"。
按以下顺序进行检查的顺序

  • 如果condition1返回True,则返回expr1;如果False,则检查下一个条件

  • 如果条件-m返回True,则返回expr-m,如果返回False,则检查带有其他嵌套的if..elif..else的else块。

  • 如果condition3返回True,则返回expr3;如果false返回false,则返回嵌套块中的下一个条件。

  • 如果条件-n返回True,则返回expr-n;如果返回False,则从其他条件返回expr5.

Python脚本示例

在这个例子中,我在一个衬里的" else block"中使用了" nested if else"。
执行顺序将按照提供的顺序:

  • 首先,从最终用户那里收集b的整数值

  • 如果b的值等于100,则if条件返回True并返回100。

  • 如果b的值等于50,则elif条件返回True并返回50

  • 如果if和elif条件均返回False,则执行else else if和else条件的地方执行else块。

  • 在" else块"内部,如果b大于100,则返回大于100;如果返回False,则返回小于100。

#!/usr/bin/env python3
b = int(input("Enter value for b: "))
a = "equal to 100" if b == 100 else "equal to 50" if b == 50 else ("greater than 100" if b > 100 else "less than 100")
print(a)

此代码的多行形式为:

#!/usr/bin/env python3
b = int(input("Enter value for b: "))
if b == 100:
    a = "equal to 100"
elif b == 50:
    a = "equal to 50"
else:
    if b > 100:
        a = "greater than 100"
    else:
        a = "less than 100"
print(a)

输出:

# python3 /tmp/if_else_one_line.py
Enter value for b: 10
less than 100
# python3 /tmp/if_else_one_line.py
Enter value for b: 100
equal to 100
# python3 /tmp/if_else_one_line.py
Enter value for b: 50
equal to 50
# python3 /tmp/if_else_one_line.py
Enter value for b: 110
greater than 100