继续阅读笔记
第六章节:抽象
懒惰!
抽象可以用于编写复杂的大型程序,以及更好的被人理解。抽象可以隔离具体的实现细节,而更聚焦在能做什么,以及做什么的所需条件上。
重复工作而不作总结归纳并优化流程,就是浪费人生 —— 一些人生感悟。
不求甚解。
结构化编程的核心是函数。
函数定义:
函数的嵌套:
最好养成给函数写文档的习惯。文档字符串:
在python中,return语句的作用只是为了让函数结束而已。
对什么都不返回的函数,可以不包含return,也可以包含一个没有在后面指定返回值的纯return。没有指定返回值的时候,函数返回None
参数的工作原理:
在python中,形参和实参的概念区别并不是很显著。叫接收值和传入值会更好理解
参数是一种变量。参数存储在函数局部作用域。在函数内部如果重新关联参数的话,不会影响到函数外部的变量。但是,如果参数是一种可变的数据结构,比如列表,那么函数就可以影响到外部了。所以,如果不想要影响,你可以创建副本,让原本的容器更安全,不会被改。
为什么想要改?
在提高程序的抽象程度方面,用函数修改数据结构是不错而且常见的方式
有一点数据库操作的味道了。后面会进一步整理,这里的书本示例太基础了,对初学者不必要。后面可以重点学习数据库知识。
需要锻炼抽象概念。
工作经验:代码规范还是不太建议传入可变参数。最好是返回修改后的值
参数的使用:位置参数 和 关键字参数。参数较多的时候指定关键字更加清晰,与顺序不耦合。(结合参数默认值使用)
不建议位置参数和关键字参数混用。
参数的收集:
参数前面的星号*将提供的所有值都放到一个元组中,收集起来。星号的作用是,收集余下的位置参数。没有剩余的时候,搜集的结果是空元组。
注意,需要结合关键字参数使用,最好,因为防止歧义。
收集位置参数用*,收集关键字参数,用**,收集的结果是字典而不是元组。
结合之前对列表,元组的学习,这个收集策略很自然能理解。
参数的分配:(总的来说用起来非常别扭,不如不用)
使用元组作为函数的输入,并且分配到对应的位置参数上。需要*来解引用。
使用字典来传需要**。
作用域:看不见的字典,也就是:命名空间