python - 为什么这些速记不能相互配合?
问题描述
我想知道如何利用 if-else 的速记符号和+=
Python 中这个简单的表达式:
我试图在任何地方设置括号并更改+=
为*=
当然并没有改变情况。
这按预期工作:
a, b = 0, True
for i in range(123):
if b == True:
a = a + 1
仍然按预期工作,尝试 if-else 的简写导致我:
a, b = 0, True
for i in range(123):
a = a + 1 if b == True else a
最后尝试写:
a, b = 0, True
for i in range(123):
a += 1 if b == True else a:
失败了,令人惊讶的是,我很快就得到了巨大的整数a
此外,我真的很喜欢一些人手不足的东西,例如:
a, b = 0, True
for i in range(123):
a += 1 if b
for 循环需要保持原样,因为在我的情况下,还有其他操作会影响b
.
解决方案
由于似乎没有人发帖,为什么会这样,这是我的 - 行:
a = a + 1 if b == True else a
a += 1 if b == True else a
被python视为:
a = (a + 1 if b == True else a)
a += (1 if b == True else a)
这就是为什么您在第二个版本中快速获得大量数字的原因——您将在a
何时a
添加。如果你想保留,然后去:b
False
if
a += (1 if b else 0)
也不要比较b
(True
或者False), go fo
如果是b`,因为它更pythonic(它会防止一些奇怪的错误,当其他代码开始与你的交互时)。
编辑:为更短的代码寻找@Tomerikoo 的答案,但请记住,这些水域可能是浑浊的,并不是每个人都知道/很容易遵循,将布尔值添加到 int 首先视为 1 (或 0 if False
)。
推荐阅读
- dynamics-crm - 如何获得“哪些更新的字段可以触发 Dynamics CRM 工作流”?
- scala - 如何从自定义类型开始一个空变量?
- c# - 当我在夹具类中创建新的自定义 FluentValidator 对象时,.Net Core 3.1 Xunit 运行测试会导致堆栈溢出错误
- javascript - 将旧的 wordpress 简码插件转换为块
- json - 带有 JSON 的 Kendo Grid .NET Core 模板
- vbscript - 在组 AD VBS 中查找用户非常慢
- c++ - C++ 这些对象是存放在堆里还是栈里?
- python - Pandas 旋转多列
- reactjs - 在不允许的路线上执行并强制重定向
- c# - 为 Microsoft Graph SDK 实现自定义身份验证处理程序