元组()和列表 [] 前面用*表示????(没看懂适用场景)
常用的高阶函数
高阶函数就是以函数(常用匿名函数lambda)作为参数的函数
reduce是完成次序迭代,减少了参与计算的因式个数
# 1,map将一个函数作用到一个序列或者多个序列配对
#map英文单词原意:映射
list(map(lambda x:x**2,[1,2,3,4]))
list(map(lambda x,y:x+y,'abc','123'))
### 2,reduce 将一个带有两个参数的函数依次迭代作用到一个序列
#reduce英文单词原意:减少
#reduce(f,[a,b,c,d]) = f(f(f(a,b),c),d)
from functools import reduce
reduce(lambda x,y:x+y,[1,2,3,4])
### 3,filter 根据规则过滤序列中的元素
#filter英文单词愿意:过滤
list(filter(lambda x:x>0,[-1,-2,1,2]))
面向对象与面向过程
面向过程–就是不断的定义函数,函数依次执行
面向对象(便于使用、拓展)–需要创建类(数据、代码的封装),类是更抽象、基础的函数
我的理解,以学做菜为例,面向过程的教学就是按选材、刀工、火候等教学(一个学校的成熟系统课程);面向对象的教学就是按食谱教学(类里有原材料、有工具,任意一个单元学完都能做出一个独立又完整的菜),两者是对厨师进行训练的不同教学形式,各有千秋。因此,面向对象的教学是更适合迁移,也更容易被人接受理解,激发兴趣继续学习,是提供各取所需的按键。我认为面向过程其实更有底蕴和挑战性,是对细节的提高。面向过程和面向对象相辅相成,面向对象降低了入门门槛更灵活,面向过程的理解能帮助面向对象的提高。
self表示对象本身(相当于英语写作里的it指示代词)传参的时候不需要传
私有方法和私有属性都不能之间调用——外部不能访问,但内部(定义的时候)可以访问
对象(具体,也叫基类)是类(抽象,对象的共同点)的实例
“万物皆对象”
封装与继承
我的理解:封装就是构造类(数据+代码)——创造魔法;继承就是教对象使用已有的东西——使用魔法。
类里面的私有函数一定是双下划线开头(但模块中定不在类中时,私有函数可以不是双下划线开头)
对象属性自己有属性的时候优先调用自己的(不会因此改变类属性),没有的话会调用类属性
下面的两个实现效果一样:
函数的内部实现是因为调用了定制方法
模块与包
一个.py文件就是一个模块——相当于一道菜/一个按钮
几个模块之间相互关联,形成的一个模块——相当于一桌菜/几个按钮
包是一个特殊的模块,里面有__init__.py。
当作为import引入时,不执行(因为name此时指所引入的模块名)
作为脚本,就会执行test
包示范
这3个Animal分别指包名、子模块名、类名
两个Dog含义不同:从子模块导入类,实现创建对象snoopy的目的