1 收集参数

1
def test(*params, extra)

在调用时要用关键词参数来制定extra,不然python会把你的实参都列入收集参数的范畴。

所以,建议再有其他参数时,设置默认参数,如:

1
def test(*params, extra = 8)

收集参数会被打包成一个元祖。

有打包就有解包,如一个列表 a = [1, 2, 3, 4, 5, 6] 要作为参数放入收集参数,则要先解包,同样用*解包,不然会出错:

1
test(*a)

2 函数变量作用域

如果在函数内部试图修改全局变量,python会创建一个局部变量代替(名字一模一样),所以真正的全局变量是一点不变的。

3 dict()

dict() 的参数可以是一个序列,但不可以是多个,所以:

1
dict((('a', 1), ('b', 2), ('c', 3)))  #注意括号个数

但可以:

1
dict(one=1, two=2, three=3)

4 zip()

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

1
2
3
4
5
6
7
8
9
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]

5 两个列表一起打乱

1
2
3
4
import random
c = list(zip(a, b))
random.shuffle(c)
a[:], b[:] = zip(*c)

shuffle() 方法将序列的所有元素随机排序

1
2
3
4
5
6
7
import random

list = [20, 16, 10, 5];
random.shuffle(list)
print("随机排序列表 : ", list)

随机排序列表 : [16, 5, 10, 20]

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

1
2
3
4
5
6
7
8
9
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]