Jython - 这两个布尔语句做同样的事情吗?

Jython - Do these two boolean statements do the same thing?

我是 Python 的新手,但我 认为 我了解流量控制的工作原理。

我从 Jython github 第 418 行

粘贴这个
418: pkgname = globals.get('__package__')
419: if pkgname is not None:
420:     if not pkgname and level > 0:
421:         raise ValueError, 'Attempted relative import in non-package'

第 419 行的 pkgname is not None 是否与第 420 行的 not pkgname 做同样的事情?如果是这样,那张支票为什么会在那里?

我正在阅读导入源代码,以便更好地理解系统,虽然很小,但让我觉得很奇怪。由于我还在学习 Python,我不想想当然。

谢谢!

你是对的,第二次检查是否不需要 pkgname,所以代码可以是

418: pkgname = globals.get('__package__')
419: if pkgname is not None:
420:     if level > 0:
421:         raise ValueError, 'Attempted relative import in non-package'

我不知道 pkgname 的有效值是什么,但技术上 not pkgname 可以测试任何 falsy 值,例如 None,还有 False0[]"" 等。但是,globals.get() 只会 return None 如果globals() 字典键不存在,所以如果只是为了测试它,那么它确实是多余的。

旁注:想知道您为什么要通过阅读 Jython 代码库来学习 python。我建议您从使用参考 CPython 实现和文档而不是代码库本身开始