每学期我至少有一个Python学生使用dict.update()来添加单个键/值对,即:
mydict.update({'newkey':'newvalue'})
Run Code Online (Sandbox Code Playgroud)
代替
mydict['newkey'] = 'newvalue'
Run Code Online (Sandbox Code Playgroud)
我不教这种方法,我不知道他们在哪里找到这个例子,但是我告诉他们不要这样做,因为效率较低(可能会创建一个新的2元素字典)并且因为它是非标准的.
老实说,我可以理解使用可见方法而不是这种语法的愿望 - 它可能与其他方法调用更加一致.但我觉得它看起来像一个新手的方法.
在这一点上,任何人都有任何智慧吗?
ick*_*fay 25
基准测试显示您对其性能影响的怀疑似乎是正确的:
$ python -m timeit -s 'd = {"key": "value"}' 'd["key"] = "value"'
10000000 loops, best of 3: 0.0741 usec per loop
$ python -m timeit -s 'd = {"key": "value"}' 'd.update(key="value")'
1000000 loops, best of 3: 0.294 usec per loop
$ python -m timeit -s 'd = {"key": "value"}' 'd.update({"key": "value"})'
1000000 loops, best of 3: 0.461 usec per loop
Run Code Online (Sandbox Code Playgroud)
也就是说,它在我的机器上慢了大约六倍.但是,如果您需要最佳性能,Python已经不是您使用的语言了,因此我建议您使用在这种情况下最易读的内容.对于很多事情,这将是[]方式,但update在这种情况下可能更具可读性:
configuration.update(
timeout=60,
host='example.com',
)
Run Code Online (Sandbox Code Playgroud)
…或类似的东西.
有些人认为 []= 不是面向对象语言或任何其他语言中的有效语法元素。我记得几十年前当我从事 APL 语言开发时就听到过这个论点。该语法是 Fortran 的保留...
我个人并不赞同这种观点,并且对索引作业非常满意。但有些人会声称真正的方法调用更好。当然,拥有多个解决方案总是好的。
编辑:这里真正的问题是可读性,而不是性能,索引作业一直存在,因为许多人发现作业更容易阅读,即使理论上不太正确。
直接更新密钥的速度是原来的三倍,但 YMMV:
$ python -m timeit 'd={"k":1}; d.update({"k":2})'
1000000 loops, best of 3: 0.669 usec per loop
$ python -m timeit 'd={"k":1}; d["k"] = 2'
1000000 loops, best of 3: 0.212 usec per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10250 次 |
| 最近记录: |