python 官方文档阅读
python可视化编程网站
循环
循环的问题
list类型是可变序列
1 | words = ['cat', 'window', 'defenestrate'] |
如果将上述代码的循环语句改为:for w in words:
那么这个循环就变成了死循环
原因是words这个list
会被修改
同样的可以看这个:
1 | basket = ['apple', 'orange', 'pear', 'orange', 'banana'] |
在经过sorted
函数之后,basket已经被修改了
可以看这个:
同样的list还有这样一个问题:
代码如下:1
2
3
4
5
6
7def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
修改成这样就行:
1 | def f(a, L = None): |
循环的tricks
dict循环
1 | knights = {'gallahad':'the pure', 'robin':'the brave'} |
list循环
1 | for index, value in enumerate(['tac', 'tic', 'toe']): |
两个list循环
1 | questions = ['name', 'quest', 'favorite color'] |
逆向循环
1 | # 逆向循环序列时,先正向,再调用reverse()函数 |
指定顺序循环,用sorted
函数
参数的传递
之前还一直没明白python中**param
这种传递形式的用法
这个栗子就很棒啦
1 | def cheeseshop(kind, *arguments, **keywords): |
结果如下:
1 | -- Do you have any Limburger ? |
第一个kind参数就是第一个字符串,之后arguments
相当于一个接收了一个list,keywords接收了一个dict
解包参数列表
比如这个栗子:
1 | args = [3,6] |
输出的结果就是
[3,4,5]
也就是说我们可以通过*
运算符来对一个list进行解包并将其作为参数传递
匿名函数lambda
1 | pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] |
sort方法有两个参数,一个是指定待排序的关键字,一个是reversed,其中key用一个匿名函数进行指定,有一点函数式编程的味道