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

发布于 2025-01-12 01:40:23 字数 638 浏览 1 评论 0原文

我对 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,所以我不想把任何事情视为理所当然。

谢谢你!

I'm reasonably new to Python but I thought I understood how the flow control worked.

I'm pasting this from the Jython github at line 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'

Does pkgname is not None on line 419 do the same thing as not pkgname on line 420? If it does, why would that check be there?

I'm reading the import source code so I can understand the system better and, though minor, this struck me as odd. As I'm still learning Python, I don't want to take anything for granted.

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

就像说晚安 2025-01-19 01:40:23

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

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

I don't know what the valid values are for pkgname but technically not pkgname could test for any falsy value, such as None, but also False, 0, [], "" etc. However, globals.get() will only return None if the globals() dict key is absent so if the intention is only to test for that then it is indeed redundant.

Side note: wonder why you're learning python via reading the Jython codebase. I suggest you start with using the reference CPython implementation and with the docs rather than the codebase itself

后来的我们 2025-01-19 01:40:23

您是正确的,第二次检查是否不需要 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'

You are correct the second check for if not pkgname is not needed so the code can just be

418: pkgname = globals.get('__package__')
419: if pkgname is not None:
420:     if level > 0:
421:         raise ValueError, 'Attempted relative import in non-package'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文