eva*_*n54 2 python coding-style tuples list data-structures
我应该使用以下哪个以及为什么?
import numpy as np
a = np.zeros([2, 3])
b = np.zeros((2, 3))
Run Code Online (Sandbox Code Playgroud)
在很多情况下你可以以任何一种方式传递参数,我只是想知道一个是否更像Pythonic,或者是否有其他原因应该优先于另一个.
我看了一下这个问题,人们试图解释元组和列表之间的区别.这不是我感兴趣的,除非有理由我应该关心,当然我忽略了!
更新:
虽然使用numpy作为示例,但这通常与python有关.非笨拙的例子如下:
a = max([1, 2, 3, 5, 4])
b = max((1, 2, 3, 5, 4))
Run Code Online (Sandbox Code Playgroud)
我不是在编辑上面的内容,因为有些答案在他们的解释中使用了numpy
我在将文字迭代传递给构造函数或函数的上下文中回答这个问题,而构造函数或函数的类型无关紧要.如果你需要传入一个hashable参数,你需要一个元组.如果你需要它变异,传入一个列表(这样你就不会将元组添加到元组,从而使对象的创建成倍增加.)
你的问题的答案是,更好的选择在情境上有所不同.这是权衡.
从list
类型开始,它是可变的,它预先分配内存以供将来扩展:
a = np.zeros([2, 3])
Run Code Online (Sandbox Code Playgroud)
亲:它很容易阅读.
骗局:它浪费了记忆力,而且性能较差.
接下来,tuple
类型,这是不可变的.它不需要为将来的扩展预分配内存,因为它无法扩展.
b = np.zeros((2, 3))
Run Code Online (Sandbox Code Playgroud)
Pro:它使用最少的内存,而且性能更高.
Con:它的可读性稍差.
我倾向于传递以内存为考虑因素的元组文字,例如,许多人都会使用的长时间运行的脚本.另一方面,当我使用交互式解释器时,我更喜欢传递列表,因为它们更具可读性,方括号和括号之间的对比使得易于视觉解析.
您应该只关心函数中的性能,其中代码被编译为字节码:
>>> min(timeit.repeat('foo()', 'def foo(): return (0, 1)'))
0.080030765042010898
>>> min(timeit.repeat('foo()', 'def foo(): return [0, 1]'))
0.17389221549683498
Run Code Online (Sandbox Code Playgroud)
最后,请注意,其他考虑因素将使性能考虑相形见绌.您使用Python来提高开发速度,而不是算法实现的速度.如果你使用一个糟糕的算法,你的表现会更糟.它在许多方面也非常高效.我认为这只是重要的,因为它可以扩展,如果它可以改善大量使用的过程死于一千次死亡的死亡.
归档时间: |
|
查看次数: |
132 次 |
最近记录: |