我在Python中遇到了一段非常奇怪的代码:
....
self.myReturnCode = externalProcessPopen.returncode
....
....
return not self.myReturnCode
....
究竟return not
代表什么?我知道Popen进程的返回码在它仍在运行时为None,一旦完成并成功退出,则为随机数。但是代码的作者究竟想要在这里实现什么呢?
值得注意的是,同一作者稍后会检查返回代码,如下所示:
if not testClass.testFunction():
logger.error('Failed to execute Function')
....
答案 0 :(得分:8)
not
是boolean operator,它返回值的布尔反转。 return
返回该运算符的结果。换句话说,表达式应该被理解为return (not self.myReturnCode)
。引用文档:
如果参数为假,则
not
运算符True
,否则为False
。
如果self.myReturnCode
是真值,则not self.myReturnCode
为False
,反之亦然。请注意,self.myReturnCode
可以是任何Python值,但not
始终会返回布尔值,True
或False
。
如果externalProcessPopen.returncode
是外部进程的返回代码,那么如果进程退出时出现错误,那么它将是一个正整数,0
如果它成功退出。这称为process exit status;返回的非零值完全取决于进程。然后not 0
为True
,not 1
(或更高的整数值)为您提供False
。
如果是None
,则会返回True
(not None
为True
),但subprocess.Popen()
返回代码为如果该流程尚未退出,则仅 None
。
答案 1 :(得分:6)
return not self.myReturnCode
应解释为:
return (not self.myReturnCode)
它在您的代码中所做的只是:
0
,则返回True
0
,则返回False
。答案 2 :(得分:2)
它不是随机数,它是外部进程的返回码,其中0表示成功,非零数表示失败。
因此,返回not self.myReturnCode
表示在流程成功时返回True
,在流程显示失败时返回False
。
答案 3 :(得分:2)
return not self.myReturnCode
相当于:
return False if self.myReturnCode else True