为什么这个python代码有效?

时间:2016-12-19 06:36:42

标签: python

# this code I don't understand 
def cls():                       #if statement freaks me out
    os.system('cls' if os.name=='nt' else 'clear')

我知道它有效,但不是为什么它有效。经过几个小时的浏览谷歌,python文档和stackoverflow,我不是更聪明。我一直无法找到任何解释在这样的函数调用中使用IF语句的方式。我已经在2.7和3.5下运行它,所以它似乎并不特定于特定版本。我已经看到类似的东西完成for循环排序得到它可能是一种标准的做事方式。我有点像自己。只是不明白它是如何工作的。

我对如何在系统调用中评估IF语句感到困惑,我对IF语句的语法特别感到困惑。我在我读过的任何文档中都没有看到这种语法。

Python对我来说是全新的。如果这是简单的傻瓜,请原谅我。但是我没理解。

4 个答案:

答案 0 :(得分:5)

如果您更熟悉类C语言及其三元运算符,Python a if b else cb ? a : c类似。因此,上面的代码说:

if we are on NT/Windows
  then use `cls`
else (for Linux, etc) use `clear`

然后将结果传递给os.system()命令以执行特定于操作系统的操作。

这是some tutorial information on this subject

答案 1 :(得分:4)

A if C else B

首先评估C;如果是真的,则评估A给出 结果,否则,评估B得出结果。

自Python 2.5以来,添加了此快捷方式条件表达式语法 Check it here

在其他语言中有类似的语法,以Java为例: min = (a<b)? a: b检查a是否小于b,如果a小则返回a,否则返回b。顺便说一下,在java中调用三元运算符

在你的情况下:

'cls' if os.name=='nt' else 'clear'它检查os.name是否等于字符串nt,如果是,则返回cls,否则返回clear

答案 2 :(得分:3)

此内联if - else是三元运算符的python版本。

用C / C ++ / Java / JavaScript等语言编写

a = b > c ? 10 : 20

在python中你会写与

相同
a = 10 if b > c else 20

您可以使用相同的构造将参数传递给函数。

在C / C ++中

foo(b > c ? 10 : 20)

在python中

foo(10 if b > c else 20)

答案 3 :(得分:2)

if表达式不在系统调用内执行。在系统调用之前执行。您的代码等同于

command = 'cls' if os.name=='nt' else 'clear'
os.system(command)

if表达式本身只是if语句的简短形式

if os.name=='nt':
    command = 'cls'
else:
    command = 'clear'
os.system(command)