一、罗列全部的内置函数
戳:https://docs.python.org/2/library/functions.html
二、range、xrange(迭代器)
无论是range()还是xrange()都是Python里的内置函数。这个两个内置函数最常用在for循环中。例如:
- >>> for i in range(5):
- ... print i
- ...
- 0
- 1
- 2
- 3
- 4
- >>> for i in xrange(5):
- ... print i
- ...
- 0
- 1
- 2
- 3
- 4
- >>>
range()和xrange() 在Python 2里是两种不同的实现。但是在Python 3里,range()这种实现被移除了;
保留了xrange()的实现,且将xrange()重新命名成range()。
首先,我们来看Python 2里range()。它是一个内置函数,这个函数用于创建整数等差数列。因此它
常被用于for循环。下面是range()的官方帮助文档。
- Help on built-in function range in module __builtin__:
- range(...)
- range(stop) -> list of integers
- range(start, stop[, step]) -> list of integers
- Return a list containing an arithmetic progression of integers.
- range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
- When step is given, it specifies the increment (or decrement).
- For example, range(4) returns [0, 1, 2, 3]. The end point is omitted!
- These are exactly the valid indices for a list of 4 elements.
- (END)
从官方帮助文档,我们可以看出下面的特性:
1、内置函数(built-in)
2、接受3个参数分别是start, stop和step(其中start和step是可选的,stop是必需的)
3、如果没有指定start,默认从0开始(Python都是从0开始的)
4、如果没有指定step,默认step是1。(step不能是0,如果指定step为0,“ValueError: range() step argument must not be zero”
将会被抛出。
额外的特性:
1、当step为正数时,start应该小于stop,否则将生成[ ],即空数列。
- >>> range(-3)
- []
- >>> range(5, 1)
- []
- >>> range(1,1)
- []
2、当step为负数时,start应该大于stop,否则将生成[ ],即空数列。
这两个特性说明range()可以生成递增和递减的数列。
下面是range()生成数列的例子:
- >>> range(5)
- [0, 1, 2, 3, 4]
- >>> range(1,8,3)
- [1, 4, 7]
- >>> range(0, -10)
- []
- >>> range(0, -10, -2)
- [0, -2, -4, -6, -8]
- >>>
接下来看看xrange()。 xrange()虽然也是内置函数,但是它被定义成了Python里一种类型(type),
这种类型就叫xrange。我们从Python 2的interactive shell里很容易看到这点。
- >>> range
- <built-in function range>
- >>> xrange
- <type 'xrange'>
- >>>
我们再来看看xragne的官方帮助文档:
- Help on class xrange in module __builtin__:
- class xrange(object)
- | xrange(stop) -> xrange object
- | xrange(start, stop[, step]) -> xrange object
- |
- | Like range(), but instead of returning a list, returns an object that
- | generates the numbers in the range on demand. For looping, this is
- | slightly faster than range() and more memory efficient.
- |
- | Methods defined here:
- |
- | __getattribute__(...)
- | x.__getattribute__('name') <==> x.name
- |
- | __getitem__(...)
- | x.__getitem__(y) <==> x[y]
- |
- | __iter__(...)
- | x.__iter__() <==> iter(x)
- |
- | __len__(...)
- | x.__len__() <==> len(x)
- |
- | __reduce__(...)
- |
- | __repr__(...)
- | x.__repr__() <==> repr(x)
- |
- | __reversed__(...)
- | Returns a reverse iterator.
- |
- | ----------------------------------------------------------------------
- | Data and other attributes defined here:
- |
- | __new__ =
- | T.__new__(S, ...) -> a new object with type S, a subtype of T
- (END)
从文档里可以看出,xrange和range的参数和用法是相同的。只是xrange()返回的不再是一个数列,而是一个
xrange对象。这个对象可以按需生成参数指定范围内的数字(即元素)。由于xrange对象是按需生成单个的
元素,而不像range那样,首先创建整个list。所以,在相同的范围内,xrange占用的内存空间将更小,xrange
也会更快。实际上,xrange由于是在循环内被调用时才会生成元素,因此无论