美文网首页
Python - Day6

Python - Day6

作者: 姚屹晨 | 来源:发表于2017-10-01 15:18 被阅读11次

廖雪峰

1.关键字参数

①可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装成一个tuple;而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict

key_parameter.png
2.命名关键字参数

①有什么用?

  • 限制关键字参数的名字。
没加参数名.png
  • 注:调用时缺少参数名cityjobPython解释器把这4个参数均视为位置参数,但person()函数仅能接收2个位置参数。
正确的命名关键字参数.png 关键字不能是表达式.png

②命名关键字参数可以有缺省值(默认值),从而简化调用:

命名关键字参数可以设置默认值从而简化调用.png

③如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不需要一个特殊分隔符*(asterisk)

可选参数和关键字参数的组合可以省略一个asterisk.png
3.参数组合

①有哪几种参数?

  • 必选参数、默认参数、可变参数、关键字参数和命名关键字参数

②参数定义的顺序?

  • 必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
必选参数默认参数.png

③神奇的tupledict

神奇的tuple和dict会自动补充.png
4.小结

①默认参数一定要用不可变对象!

②注意可变参数和关键字参数的语句:

*args是可变参数,args接收的是一个tuple;
**kw是关键字canshu,kw接收的是一个dict。

③调用函数时,如何传入可变参数和关键字参数的语法?

  • 可变参数既可以直接传入:func(1,2,3),又可以先组装listtuple,再通过*args传入:func(*(1,2,3))

  • 关键字参数既可以直接传入:func(a=1,b=2),又可以先组装dict,再通过**kw传入:func(**{'a':1,'b':2})

5.递归函数

①是什么?

  • 一个函数在内部调用自身。

②如何解决栈溢出?

  • 尾递归优化。

③什么是尾递归优化?

尾递归.png
6.Hanoi
hanoi.png
7.切片

① 存在的原因?

  • 因为我们经常需要获取一个listtuple的部分元素。

[]for ... in + rangeslice

slice.png

③支持倒数切片

slice中可为负值.png

④slice各种操作

slice一波操作.png

tuple也是一种list,唯一区别是tuple不可变。因此tuple也可以进行切片操作,操作的结果仍是tuple

对tuple进行切片.png

⑥字符串也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以使用切片操作,操作结果仍是字符串。

字符串也可以进行切片操作.png
8.迭代

①是什么?

  • 当使用for循环来遍历整个listtuplestr时,这种遍历我们叫做迭代。
迭代list.png

②只要是可迭代对象,无论有无下标,都可以迭代,比如dictset

使用forIn迭代字典.png
  • 注意喔,这里还体现了代码块的执行顺序,hanoi
set可是可迭代对象.png
  • 两种获得dictvalue的方式
两种获得dict中value的方式.png

③如果我要同时迭代keyvalue怎么办?

同时输出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
  • 创建lg的区别仅在于最外层的[]()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

相关文章

网友评论

      本文标题:Python - Day6

      本文链接:https://www.haomeiwen.com/subject/bbfaextx.html