擅长:python、mysql、java
<p>小心<code>-1 ** n</code>,它没有像您预期的那样被解析<code>**</code>比一元数<code>-</code>(具有更高的优先级)绑定更紧密,因此此表达式的解析方式类似于<code>-(1 ** n)</code>。类似于Blueteiths解决方案,我会做如下操作</p>
<pre><code>from math import factorial, pow
from itertools import takewhile, count
large = lambda y: abs(y) > 1e-7
def sin_gen(x):
for n in count():
yield (pow(-1, n) * pow(x, (2 * n + 1))) / factorial(2 * n + 1)
def sin(x):
return sum(takewhile(large, sin_gen(x)))
print(sin(5)) # -0.9589242932128198
</code></pre>