GVKun编程网logo

Python-你是否应该始终偏爱xrange()而不是range()?

10

对于Python-你是否应该始终偏爱xrange感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍而不是range,并为您提供关于CommonLisp中的Pythonrange()模拟、JavaS

对于Python-你是否应该始终偏爱xrange感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍而不是range,并为您提供关于Common Lisp中的Python range()模拟、JavaScript函数类似于Python range()、JPA EntityManager:为什么使用persist()而不是merge()?、Python NumPy中的np.mean()vs np.average()吗?的有用信息。

本文目录一览:

Python-你是否应该始终偏爱xrange()而不是range()?

Python-你是否应该始终偏爱xrange()而不是range()?

为什么或者为什么不?

答案1

小编典典

对于性能而言,尤其是在较大范围内进行迭代时,xrange()通常会更好。但是,在某些情况下,你可能更喜欢range()

  • 在Python 3,range()做什么xrange()用做的,xrange()不存在。如果要编写可在Python 2和Python 3上运行的代码,则不能使用xrange()

  • range()在某些情况下实际上可以更快-例如。如果多次重复相同的序列。 xrange()每次都必须重新构造整数对象,但是range()将拥有真正的整数对象。(但是,在内存方面,它总是会表现得更差)

  • xrange()在需要真实列表的所有情况下都不可用。例如,它不支持切片或任何列表方法。

[编辑]有range()几篇文章提到2to3工具将如何升级。为了记录在案,这里是对一些用法示例运行该工具的输出range()xrange()

RefactoringTool: Skipping implicit fixer: bufferRefactoringTool: Skipping implicit fixer: idiomsRefactoringTool: Skipping implicit fixer: ws_comma--- range_test.py (original)+++ range_test.py (refactored)@@ -1,7 +1,7 @@ for x in range(20):-    a=range(20)+    a=list(range(20))     b=list(range(20))     c=[x for x in range(20)]     d=(x for x in range(20))-    e=xrange(20)+    e=range(20)

如你所见,当在for循环或理解中使用时,或已经用list()包装的地方,范围保持不变。

Common Lisp中的Python range()模拟

Common Lisp中的Python range()模拟

如何在Common Lisp中创建连续数字列表?

换句话说,rangeCommon Lisp中的Python函数等效于什么?

在Python中,range(2,10,2)return [2,4,6,8],第一个和最后一个参数是可选的。尽管Emacs
Lisp具有,但我找不到通用的方法来创建数字序列number-sequence

可以使用循环宏模拟范围,但是我想知道一种可接受的方法来生成带有起点和终点以及步骤的数字序列。

JavaScript函数类似于Python range()

JavaScript函数类似于Python range()

JavaScript中是否有类似于Python的函数range()

我认为应该有比每次编写以下几行更好的方法:

array = new Array();for (i = 0; i < specified_len; i++) {    array[i] = i;}

答案1

小编典典

,没有,但 您可以制造一个

JavaScript的Python实现 range()

尝试 模拟它在Python中的工作方式 ,我将创建类似于以下的函数:

function range(start, stop, step) {    if (typeof stop == ''undefined'') {        // one param defined        stop = start;        start = 0;    }    if (typeof step == ''undefined'') {        step = 1;    }    if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) {        return [];    }    var result = [];    for (var i = start; step > 0 ? i < stop : i > stop; i += step) {        result.push(i);    }    return result;};

请参阅此jsfiddle以获取证明。

range()JavaScript和Python之间的比较

它的工作方式如下:

  • range(4)返回[0, 1, 2, 3]
  • range(3,6)返回[3, 4, 5]
  • range(0,10,2)返回[0, 2, 4, 6, 8]
  • range(10,0,-1)返回[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
  • range(8,2,-2)返回[8, 6, 4]
  • range(8,2)返回[]
  • range(8,2,2)返回[]
  • range(1,5,-1)返回[]
  • range(1,5,-2)返回[]

及其Python对应物的 工作方式完全相同 (至少在上述情况下):

>>> range(4)[0, 1, 2, 3]>>> range(3,6)[3, 4, 5]>>> range(0,10,2)[0, 2, 4, 6, 8]>>> range(10,0,-1)[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]>>> range(8,2,-2)[8, 6, 4]>>> range(8,2)[]>>> range(8,2,2)[]>>> range(1,5,-1)[]>>> range(1,5,-2)[]

因此,如果您需要一个功能类似于Python的功能range(),则可以使用上述解决方案。

JPA EntityManager:为什么使用persist()而不是merge()?

JPA EntityManager:为什么使用persist()而不是merge()?

EntityManager.merge()可以插入新对象并更新现有对象。

为什么要使用persist()(只能创建新对象)?

Python NumPy中的np.mean()vs np.average()吗?

Python NumPy中的np.mean()vs np.average()吗?

我注意到

In [30]: np.mean([1,2,3])
Out[30]: 2.0

In [31]: np.average([1,3])
Out[31]: 2.0

但是,应该存在一些差异,因为它们毕竟是两个不同的功能。

它们之间有什么区别?

关于Python-你是否应该始终偏爱xrange而不是range的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Common Lisp中的Python range()模拟、JavaScript函数类似于Python range()、JPA EntityManager:为什么使用persist()而不是merge()?、Python NumPy中的np.mean()vs np.average()吗?等相关知识的信息别忘了在本站进行查找喔。

本文标签: