python - “a and a or b”的目的是什么?
解决方案
我猜这是 Python 的古老(2.4 或更早版本)变体的保留,其中三元运算符尚未可用于该语言。根据Python 编程常见问题解答:
是否有等效于 C 的“?:”三元运算符?
就在这里。语法如下:
[on_true] if [expression] else [on_false] x, y = 50, 25 small = x if x < y else y
在 Python 2.5 中引入此语法之前,一个常见的习惯用法是使用逻辑运算符:
[expression] and [on_true] or [on_false]
但是,这个习惯用法是不安全的,因为当 on_true 具有错误的布尔值时,它可能会给出错误的结果。因此,最好使用 ... if ... else ... 形式。
有问题的行现在可以写成:
# Option 1
oname = args if args else '_'
# Option 2
oname = args or '_'
两者都产生相同的结果,因为在这种情况下[expression]
,选项 1 的部分与该[on_true]
部分相同。[expression]
在我看来,对于和[on_true]
相同的情况,选项 2 可以被认为是选项 1 的缩写形式。您选择使用哪一个是个人喜好。
这可能会给我们一个线索,让我们知道自从有问题的代码被触及以来已经有多久了!
推荐阅读
- javascript - 提交按钮在表单中不起作用 - laravel
- node.js - NodeJS(gettting error notes.push 不是函数)
- android - 在 DJI Android SDK 中调用 refreshFileListOfStorageLocation() 需要几秒钟才能产生结果(mavic
- angular - 在生产中更改或更换 Service Worker 的正确步骤是什么?
- node.js - Ember Js:在同一路由的动态段之间导航时出错(无法执行“insertBefore”)
- android - 构建动态加载媒体源的媒体浏览器服务
- python - 使用 Glob 合并后基于文件名添加数据框列名
- javascript - 有没有办法捕获 js 错误但不会因为它们而导致 testcafe 测试失败?
- powerbi - Power BI 图标库
- jenkins - 现有的 LDAP 正在停用,AD 将取而代之,jenkins 用户组将如何受到影响