切片(Range)

>>> l = ['A','B','C']
>>> l[0]
'A'
>>> l[0:2] #表示从索引0开始,知道索引3位置。但是不包括索引3
['A', 'B']
>>> l[1:2]
['B']

如果从索引0开始,可以简写为L[:3]

创建0-99的序列:

>>> L = list(range(100))
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 
>>> L[:10] #前10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L[-10:] #后10
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 
>>> L[:10:2] #前10个数,每两个取一个:
[0, 2, 4, 6, 8]

也适用于元组tuple

>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)

迭代 for…in

>>> for key in [1,2,3]:
...     print(key)
...
1
2
3

迭代字符串、字典

for...in: 可以直接遍历字符串。 for...in: 可以遍历字典的all key。 for...in: 配合dict.items()可以遍历key和value。 for...in: 配合enumerate(array)可以遍历数组的索引和下标。

>>> for ch in 'ABC':
...     print(ch)
...
A
B
C
>>> for key in {'a':1,'b':2,'c':3}:
...     print(key)
...
a
b
c
>>> for k , v in {'a':1,'b':2,'c':3}.items():
...     print('%s %s'%(k,v))
...
a 1
b 2
c 3
>>> for i,v in enumerate(['a','b']):
...     print(i,v)
...
0 a
1 b

关于Iterable迭代对象

可以直接用于for循环的对象统称为可迭代对象:Iterable.

可以使用isinstance判断对象是否是Iterable对象。

>>> from collections import Iterable
>>> isinstance([],Iterable)
True

关于Iterator迭代器

>>> from collections import Iterator
>>> isinstance([], Iterator)
False

生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator

把list、dict、str等Iterable变成Iterator可以使用iter()函数:

>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
for x in [1, 2, 3, 4, 5]:
    pass
实际上完全等价于:

# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:
    try:
        # 获得下一个值:
        x = next(it)
* [ ]     except StopIteration:
        # 遇到StopIteration就退出循环
        break

变量可以指向函数

>>> abs(-10)
10
>>> f = abs
>>> abs
<built-in function abs>
>>> f
<built-in function abs>
>>> f(-10)
10

函数名也是变量

>>> abs = 10
>>> abs(-10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

注:由于abs函数实际上是定义在import builtins模块中的,所以要让修改abs变量的指向在其它模块也生效,要用import builtins; builtins.abs = 10。

函数可以做参数

>>> def add(x,y,f):
...     return f(x) + f(y)
...
>>> add(-10,6,abs)
16