# 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对我来说是全新的。如果这是简单的傻瓜,请原谅我。但是我没理解。
答案 0 :(得分:5)
如果您更熟悉类C语言及其三元运算符,Python a if b else c
与b ? a : c
类似。因此,上面的代码说:
if we are on NT/Windows
then use `cls`
else (for Linux, etc) use `clear`
然后将结果传递给os.system()
命令以执行特定于操作系统的操作。
答案 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)