一种降维的方法
在python中使用sum可以使以个二维的列表降为一维。1
2
31, 2], [3, 4], [5, 6]] lst = [[
sum(lst, [])
[1, 2, 3, 4, 5, 6]
nonlocal
解决无法修改父框架中定义的变量的问题。
例如在一个高阶函数中:1
2
3
4
5
6def make_adder(a):
def adder(b):
# nonlocal a
a = a + b
return a
return adder
会报错UnboundLocalError: local variable 'a' referenced before assignment
我们可以在adder函数中添加nonlocal a
, 来允许我们更改父框架中的变量。
iterators(迭代器)
iter(iterable)
: 返回一个迭代器next(iterator)
: 返回迭代器中的下一个元素
有关字典的迭代器:iter(dict.keys())
or iter(dict)
: 迭代字典的键iter(dict.values())
: 迭代字典的值iter(dict.items())
: 迭代键值对
一些内置迭代函数map(func, iterable)
: Iterate over func(x) for x in iterablefilter(func, iterable)
: Iterate over x in iterable if func(x)zip(iterable_a, iterable_b)
: Iterate over co-indexed (x, y) pairsreversed(sequence)
: 翻转一个有顺序的可迭代对象。
上面四个函数返回值都是一个迭代器。
generators(生成器)
特殊的迭代器。
将函数中的return
换成yield
, 可以迭代函数中yield后边跟着的值。yield from
用于处理迭代器的, 例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15list(a_then_b([1, 2], [3, 4]))
[1, 2, 3, 4]
# 使用yield
def a_then_b(a, b):
for x in a:
yield x
for x in b:
yield x
# 使用yield from
def a_then_b(a, b):
yield from a
yield from b
…