写了几个功能性小程序(“面向过程”的编程)之后,就一直想着能自己写个包出来,有class有object的。
46.面向对象
1)最主要的概念为:class和object,类为抽象,对象为实例。域和方法(也就是m)被合称为类的属性。
2)class中的‘方法’为函数,class和object的域为属于他们的变量,对应分为类变量和实例变量。
3)乐器是class,弹是方法之一(比如吉他可以当鼓敲,也可以用牙齿咬),弹出来的“音色”是某乐器的域,也是实例变量。
4)对于绝版的tele黄油Fender,该型号的“产量”就是这款fender的“类变量”。(这样看感觉不太对,先放着)
5)pass 没想好怎么写内部的时候可以先空着
6)下例中,mc是Myclass类的实例(instance),name和sayHi分别为类变量,类方法。下面就是我在调用对象。
class Myclass:
name = 'porridge'
def sayHi(self):
print('tu me manques %s' % self.name)
mc = Myclass()
print(mc.name)
mc.name = 'Nono'
mc.sayHi()
“类方法和我们之前定义的函数区别在于,第一个参数必须为self。而在调用类方法的时候,通过“对象.方法名()”格式进行调用,而不需要额外提供self这个参数的值。self在类方法中的值,就是你调用的这个对象本身。”(有点绕,我放在这)
7)据说面向对象编程的概念一开始比较难理解,因为路径复杂容易让人混乱。但其实利用更抽象的概念可以得到更合理的程序设计方式。有次泛函课我印象很深,虽然不记得具体的定理了。就是一再地把条件放宽的时候,得到的函数空间就更大更抽象,能描述更多的东西。一个定理一句话就能解决高中数学奥赛压轴证明题。
---------
8)继承,这个概念更妙了。括号里是妈。妈(基本类or超类)生了很多不同的崽(导出类or子类),崽各自有各自的功能,但也有共性。除了直接用子类调对象,还可以用基本类调,但是略微不太一样。
50 and-or技巧
1)“bool and a or b语句中,当bool条件为真时,结果是a;当bool条件为假时,结果是b。”可以用来替换好几行的if else
2)and-or真正的技巧在于,确保a的值不会为假,什么是真什么是假???用list就好。
a = ""
b = "hell"
c = (True and [a] or [b])[0]
print (c)
3)总有用不了if else的时候,比如lambda表达式。
51 元组
1)与list区别在于,创建了之后元素不可修改
2)索引、切片、遍历方法都一样
54 正则表达式
1)讲得真好,Re表达式就是用来描述文本规律的,用RE表达式把规律写进代码就可以利用机器来做枯燥的事情。
2)[ ]表示满足括号中任一字符
3)因为python的字符串碰到“\”就会转义它后面的字符。如果想在字符串里打“\”,则必须要打“\\”。
4)“.”在正则表达式中表示除换行符以外的任意字符,相当于欢乐斗地主的赖子牌。
5)“\S”表示的是不是空白符的任意字符。徐熙媛。
6)I.*e 贪婪匹配 I.*?e 懒惰匹配
7)除了抓文本,还可以判断输入的文本是否符合规范,或进行分类(从而可以写用户名是否合理判断的功能)
8)如果想抓元字符本人,用转义字符“\”。
9)在抓取网页的时候,适当让程序sleep一下,可以减少短时间内的请求,提高请求的成功率。time.sleep(3)
感觉可以更快乐地做文本处理了。
61 调试程序
1)“如果遇到了错误,先别急着去改代码。试着去读一读错误提示,看看里面都说了些啥。”一开始确实会这样,现在就不会了
2)输出调试信息往往挺有用
64 列表解析
就是通过一个已有的列表生成一个新的列表。
1)在实际开发中,适当地使用列表解析可以让代码更加简洁、易读,降低出错的可能。
2);.join
数学常用文档:https://docs.python.org/3.7/library/math.html
seed随机数:https://www.geeksforgeeks.org/random-seed-in-python/
正则表达式入门:《正则表达式30分钟入门教程》
非常喜欢这种埋种子似的教学方法:
“其实我们之前一直在用”
“其实之前我们已经见过”