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
,还有 False
、0
、[]
、""
等。但是,globals.get()
只会 return None
如果globals()
字典键不存在,所以如果只是为了测试它,那么它确实是多余的。
旁注:想知道您为什么要通过阅读 Jython 代码库来学习 python。我建议您从使用参考 CPython 实现和文档而不是代码库本身开始
我是 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
,还有 False
、0
、[]
、""
等。但是,globals.get()
只会 return None
如果globals()
字典键不存在,所以如果只是为了测试它,那么它确实是多余的。
旁注:想知道您为什么要通过阅读 Jython 代码库来学习 python。我建议您从使用参考 CPython 实现和文档而不是代码库本身开始