python函数大全和意思_python 之 内置函数大全
一、羅列全部的內置函數
二、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
>>> 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由于是在循環內被調用時才會生成元素,因此無論循環多少次,只有當前一個元素
占用了內存空間,且每次循環占用的都是相同的單個元素空間。我們可以粗略的認為,相同n個元素的話,range占
用的空間是xrange的n倍。因此,在循環很大情況下,xrange的高效率和快速將表現的很明顯。我們可以用timeit
來測試一下range和xrange的執行時間。
>>> timeit.timeit('for i in range(10000000): pass',number=1)
0.49290895462036133
>>> timeit.timeit('for i in xrange(10000000): pass',number=1)
0.2595210075378418
在大量循環的條件下,可以看到xrange的高效率是很明顯的。
總結一下:
1、range()返回整個list。
2、xrange()返回的是一個xrange object,且這個對象是個iterable。
3、兩者都用與for循環。
4、xrange()占用更少的內存空間,因為循環時xrange()只生成當前的元素,不像range()一開始就成生成完整的list。
這就是在Python 2里range和xrange的相同點和區別。
那么在Python 3里,我們在前面提到了range()被移除了,xrange()被重新命名成了range()。它們之間有區別嗎?
請看下面的代碼
Python 2的xrange()
Python 2.7.6 (default, Dec 5 2013, 23:54:52)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = xrange(5)
>>> x
xrange(5)
>>> x[:]
Traceback (most recent call last):
File "", line 1, in
TypeError: sequence index must be integer, not 'slice'
>>> x[-1]
4
>>> list(x)
[0, 1, 2, 3, 4]
>>> dir(x)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__len__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>>
Python 3的range()
Python 3.3.4 (default, Feb 23 2014, 23:07:23)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = range(5)
>>> x
range(0, 5)
>>> x[:]
range(0, 5)
>>> x[:3]
range(0, 3)
>>> list(x)
[0, 1, 2, 3, 4]
>>> x[-1]
4
>>> dir(x)
['__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__','__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index', 'start', 'step', 'stop']
>>>
很明顯,range object在Python里增加了新的attributes,'count', 'index', 'start', 'step', 'stop',
且能支持slicing。Python 3的range()在xrange()的基礎上變得更強大了。
請理解下面這句話:
The advantage of therangetype over a regularlistortupleis that arangeobject will always take the same (small) amount of memory, no matter the size of the range it represents (as it only stores thestart,stopandstepvalues, calculating individual items and subranges as needed).
到這里,我們應該比較清楚range和xrange的區別了
三、yield
deffab(max):
n, a, b= 0, 0, 1
while n
a, b = b, a +b
n= n + 1c= fab(10)print(c.__next__()) # python 3.x 已經沒有 next()方法print(c.__next__())print(c.__next__())print(c.__next__())#for i in fab(10):#print(i)
總結
以上是生活随笔為你收集整理的python函数大全和意思_python 之 内置函数大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如果你有台旧电脑旧电脑可以
- 下一篇: 你真的了解笔记本电池和电源适配器吗你真的