1.关键字参数
①可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装成一个tuple;而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict。
key_parameter.png
2.命名关键字参数
①有什么用?
- 限制关键字参数的名字。
没加参数名.png
- 注:调用时缺少参数名
city和job,Python解释器把这4个参数均视为位置参数,但person()函数仅能接收2个位置参数。
正确的命名关键字参数.png
关键字不能是表达式.png
②命名关键字参数可以有缺省值(默认值),从而简化调用:
命名关键字参数可以设置默认值从而简化调用.png
③如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不需要一个特殊分隔符*(asterisk)
可选参数和关键字参数的组合可以省略一个asterisk.png
3.参数组合
①有哪几种参数?
- 必选参数、默认参数、可变参数、关键字参数和命名关键字参数
②参数定义的顺序?
- 必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
必选参数默认参数.png
③神奇的tuple和dict
神奇的tuple和dict会自动补充.png
4.小结
①默认参数一定要用不可变对象!
②注意可变参数和关键字参数的语句:
*args是可变参数,args接收的是一个tuple;
**kw是关键字canshu,kw接收的是一个dict。
③调用函数时,如何传入可变参数和关键字参数的语法?
-
可变参数既可以直接传入:
func(1,2,3),又可以先组装list或tuple,再通过*args传入:func(*(1,2,3)) -
关键字参数既可以直接传入:
func(a=1,b=2),又可以先组装dict,再通过**kw传入:func(**{'a':1,'b':2})
5.递归函数
①是什么?
- 一个函数在内部调用自身。
②如何解决栈溢出?
- 尾递归优化。
③什么是尾递归优化?
尾递归.png
6.Hanoi
hanoi.png
7.切片
① 存在的原因?
- 因为我们经常需要获取一个
list或tuple的部分元素。
②[] 和 for ... in + range 和 slice
slice.png
③支持倒数切片
slice中可为负值.png
④slice各种操作
slice一波操作.png
⑤tuple也是一种list,唯一区别是tuple不可变。因此tuple也可以进行切片操作,操作的结果仍是tuple。
对tuple进行切片.png
⑥字符串也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以使用切片操作,操作结果仍是字符串。
字符串也可以进行切片操作.png
8.迭代
①是什么?
- 当使用
for循环来遍历整个list或tuple或str时,这种遍历我们叫做迭代。
迭代list.png
②只要是可迭代对象,无论有无下标,都可以迭代,比如dict、set。
使用forIn迭代字典.png
- 注意喔,这里还体现了代码块的执行顺序,hanoi
set可是可迭代对象.png
- 两种获得
dict中value的方式
两种获得dict中value的方式.png
③如果我要同时迭代key和value怎么办?
同时输出dict中的key和value.png
- 注意
print()中的,逗号,就相当于一个空格
④由于字符串也是可迭代对象,因此,也可作用域for循环
迭代字符串.png
⑤如何判断一个对象是可迭代对象?
- 通过
collections模块的Iterable类型判断:
如何判断一个对象是可迭代对象.png
⑥Python内置的enumerate()函数可以把一个list变成索引-元素对。
list的索引元素对.png
9.列表生成式(list comprehensions):
①是什么?
-
Python内置的创建list的生成式。
②如果你要生成一个list:[1,2,3,4,5]
range生成list.png
③如何生成[1,4,9,16,25]?
将list内部的每个元素求平方.png
④简洁的方法:
使用列表生成式.png
⑤还可以对输出的数据进行筛选,比如获取偶数
筛选出偶数.png
- 注意:奇数的平方还是奇数
⑥还是使用两层循环,生成全排列
两个for循环的组合成全排列.png
⑦for循环可以同时使用两个甚至更多变量。
for循环可以同时使用两个甚至更多个变量.png
⑧使用列表生成式简化
列表生成式使用两个变量.png
⑨把一个list中所有字符变成大/小写
把一个list中的所有字符串都变成大小写.png
⑩如果一个list中既有字符串,也包含整数,如何将其中的字符串全部转换成小写格式。
- 解法1:
解法1.png
- 解法2:
解法2.png
10.生成器(Generator)
①存在的原因?
- 假如我们需要一个包含100万个元素的列表,这会占据很大的内存空间,如果我们仅仅需要访问前面的几个元素,那么后面绝大多数元素占用的空间都白白浪费了。
②如何创建一个生成器?
list和generator的区别.png
- 创建
l和g的区别仅在于最外层的[]和()。l是一个list,而g是一个generator
③如何打印generator中的数据。
打印生成器中的数据.png
④如果没有更多的元素时,抛出StopIteration的错误。
stopIteration.png
⑤注意generator也是可迭代对象喔:
generate对象是可迭代对象.png
⑥既然是可迭代对象,也就可以用for循环
既然是可迭代对象就可以使用for循环.png
11.fib
fib.png
①用for循环遍历generator函数存在一个问题:
- 获取不到
return语句的返回值。
获取generator中的return数据.png
12.生成器之杨辉三角形 range(len(L)) + 列表生成式 的强大力量
杨辉三角形.png










网友评论