小编Jan*_*ano的帖子

为什么这个 Julia 片段比 Python 等价的代码慢这么多?(有字典)

我在 Python Jupyter 中有以下代码:

n = 10**7
d = {}

%timeit for i in range(n): d[i] = i

%timeit for i in range(n): _ = d[i]

%timeit d[10]
Run Code Online (Sandbox Code Playgroud)

以下时间:

763 ms ± 19.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
692 ms ± 3.74 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
39.5 ns ± 0.186 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) …
Run Code Online (Sandbox Code Playgroud)

python julia

10
推荐指数
1
解决办法
220
查看次数

为什么一个可以加到自身的类不能求和?(a+a 有效, sum([a,a]) 失败)

在以下代码段中,我创建了一个 Counter 对象,并尝试使用三种方式将其添加到自身中。使用“+”的标准加法,从列表中减少(内部与前面相同)并使用列表中的函数 sum()。

前 2 个工作并返回预期结果,但第三个引发 TypeError 异常。

从这里我有两个问题:

  1. 如果加法有效, sum() 失败的原因是什么?
  2. 当我用 + 添加到对象时,会使用类的 __ add__ 方法。调用 sum() 时使用什么方法(如果有)?

Counter 只是一个例子,当我创建新类时,我对一般情况感兴趣,而不是对这个特别感兴趣。

from collections import Counter
from functools import reduce
a = Counter([1,1,1,1])

print(a+a+a)
print(reduce(lambda x, y: x + y, [a,a, a]))
sum([a, a, a])
Run Code Online (Sandbox Code Playgroud)

印刷:

Counter({1: 12})
Counter({1: 12})
Traceback (most recent call last):
  File "/home/user/.PyCharmCE2019.3/config/scratches/scratch.py", line 20, in <module>
    print(sum([a, a,]))
TypeError: unsupported operand type(s) for +: 'int' and 'Counter'
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
70
查看次数

标签 统计

python ×2

julia ×1