python小知识

一种降维的方法

在python中使用sum可以使以个二维的列表降为一维。

1
2
3
>>> lst = [[1, 2], [3, 4], [5, 6]]
>>> sum(lst, [])
[1, 2, 3, 4, 5, 6]

nonlocal

解决无法修改父框架中定义的变量的问题。
例如在一个高阶函数中:

1
2
3
4
5
6
def 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 iterable
filter(func, iterable): Iterate over x in iterable if func(x)
zip(iterable_a, iterable_b): Iterate over co-indexed (x, y) pairs
reversed(sequence): 翻转一个有顺序的可迭代对象。
上面四个函数返回值都是一个迭代器。

generators(生成器)

特殊的迭代器。
将函数中的return换成yield, 可以迭代函数中yield后边跟着的值。
yield from用于处理迭代器的, 例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> list(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

-------------本文结束,感谢您的阅读-------------