如何用python更简洁地编写这个函数

2024-10-03 15:23:19 发布

您现在位置:Python中文网/ 问答频道 /正文

python的美通常体现在它的简单性和一行代码上。 我慢慢地开始写了。 我有一个计算2的sum of n幂的函数。你知道吗

例如:if n==4, I get 2^4+2^3+2^2+2^1+2^0 我有这个功能,工作很好,但不知道是否有空间冷凝到一个或两个行

>>> def sumpowers(n):
...    sum=0
...    for x in range(n+1):
...       sum+=pow(2,x)
...    return sum
... 
>>> sumpowers(31)
4294967295

有什么提示或者一些built-ins的用法可以在简单性方面改进它吗?你知道吗

谢谢


Tags: of函数代码in功能forgetreturn
3条回答

使用reduce built-in和lambda,您可以实现:

>>> reduce(lambda x,y: x+y, [pow(2,i) for i in range(32)])
4294967295

in terms of function:
try this:
    >>> def test(n):
...    return reduce(lambda x,y: x+y,[pow(2,i) for i in range(n+1)])
... 
>>> test(31)
4294967295

编辑:绝对没有必要使用reduce。正如评论中指出的那样,这可能不是一个好主意。但它是函数式编程的一个方面,可以利用它,是指出的几种方法之一

请尝试以下操作:

def sumpowers(n):
    return ((2 ** (n+1)) - 1)

for循环可以替换为^{}内置和generator expression

>>> def sumpowers(n):
...     return sum(pow(2,x) for x in range(n+1))
...
>>> sumpowers(31)
4294967295
>>>

您还可以将pow(2,x)替换为2**x

>>> def sumpowers(n):
...     return sum(2**x for x in range(n+1))
...
>>> sumpowers(31)
4294967295
>>>

相关问题 更多 >