python中return语句中的逻辑运算符求值
这是如何执行的?
def f(x):
return x>0 and (x%2)+f(x/2) or 0
x
是一个数组,例如:[1, 1, 1, 3]
How does this execute?
def f(x):
return x>0 and (x%2)+f(x/2) or 0
x
is an array, for instance: [1, 1, 1, 3]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
该函数递归地计算数字 x 的二进制形式中 1 的数量。
每次该函数将最低位(1 或 0)与没有最后一位的数字的位数相加(除以 2 相当于右移 1),如果没有更多位,则将其与 0 相加。
例如:
该函数将返回 2 for 5 作为输入(5 是二进制的 101)
该函数将返回 3,表示 13 作为输入(13 是二进制的 1101)
...
The function recursively counts the number of 1's in the binary form of the number x.
Each time the function adds sums the lowest bit (either 1 or 0) with the bit count of a number without the last bit (dividing by 2 is like shifting right by 1), or with 0 if there are no more bits.
For example:
The function will return 2 for 5 as an input (5 is 101 in binary)
The function will return 3 for 13 as an input (13 is 1101 in binary)
...
return
语句中的求值与任何其他地方的求值没有什么不同。如果x
是一个列表,那么整个事情就没有意义并引发TypeError
。x
应该是一个数字才能起作用。如果
x
是一个数字,它将按如下方式工作:x>0
语句,True
返回(x%2) +f(x/2)
部分。当然,False
返回0
则无限递归evaluation in
return
statement is no different from evaluation in any other place. ifx
is a list this whole thing makes no sense and raisesTypeError
.x
should be a numeric for this to work.If
x
is a number it would work as follows:x>0
statementTrue
return(x%2)+f(x/2)
part. Which, of course, recurses infinitelyFalse
return0
你是这个意思吗?
Did you mean this?
这段代码已损坏。对于初学者来说,
x>0
始终为真。但x%2
和x/2
会产生类型错误。This code is broken. For starters,
x>0
is always true. Butx%2
andx/2
yield type errors.