1.sort与sorted的区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作
2.面向对象时
class Dog:#class关键字定义类,类名首字母大写,不用加括号 def __init__(self,name,hp,ad,type):#self可变但不可省略,最好不变, self.name=name self.blood=hp self.ad=ad self.type=type def bite(self,person): person.blood-=self.ad print('"%s"遭受到%s的强力攻击,%s损害了%s点血~~~'%(person.name,self.name,person.name,self.ad)) class Person: def __init__(self,name,hp,ad,gender): self.name=name self.blood=hp self.ad=ad self.sex=gender def fight(self,dog): dog.blood-=self.ad print('%s遭受到"%s"的强力攻击,%s消耗掉%s血!!!'%(dog.name,self.name,dog.name,self.ad)) taddy=Dog('Taddy bear',3000,25,'little') print(taddy) print(taddy.name) print(taddy.blood) print(taddy.type) print(taddy.ad) hero=Person('锤哥',60000,68,'male') print('wenzi') hero.fight(taddy) #调用函数直接打印内容 不需要外层打印 print('dssd') print(taddy.blood) print(taddy.bite(hero)) print(hero.blood)
3.获取当前月的首日的时间戳:三种方法
#第一种:显示当前月的第一天的时间戳 str_t=time.strftime('%Y') print(str_t) tup_t=time.strptime(str_t,'%Y')
print(tup_t) stamp_t=time.mktime(tup_t) print(stamp_t) print(time.time())
结果:
2019
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=1, tm_isdst=-1)
1546272000.0
1553515876.1068985
#第二种方法:显示当前月的第一天的时间戳 str_t=time.localtime() l=list(str_t) print(l) l[2]=1 l[3:6]=0,0,0 print(l) #stam_t = time.mktime(l) #mktime()函数只关注参数是不是元组 不是命名元组也是可以的 stam_t = time.mktime( tuple(l) ) #mktime()函数只关注参数是不是元组 print('当前月首日时间戳:',stam_t) print('当前月的时间戳:',time.time())
结果:
[2019, 3, 25, 20, 8, 21, 0, 84, 0]
[2019, 3, 1, 0, 0, 0, 0, 84, 0]
当前月首日时间戳: 1551369600.0
当前月的时间戳: 1553515701.0533442
#第三种方法: import time s=time.time() print(s) s1=time.localtime(s) # print(s1) # y,m=list(s1)[0],list(s1)[1] s2=(s1.tm_mday-1)*24*60*60+s1.tm_hour*3600+s1.tm_min*60+s1.tm_sec s3=time.time()-s2 print('当前月份1日的时间戳:',s3) 结束: 1553515970.418794 当前月份1日的时间戳: 1551369600.418794
4.hashlib MD5加密形式上注意项:
md5加密方式上有加盐和未加盐的区别
import hashlib m=hashlib.md5() m.update(b'cd1f35d4') #直接MD5加密 print(m.hexdigest()) m=hashlib.md5('solt'.encode('utf-8')) #加密加盐 m.update(b'cd1f35d4') print(m.hexdigest()) 结果: 4304fa334f5ef33433da994dfd1a2720 975f7d1c3467536e1a8503d3e3028a9b #形式上有很大区别 虽然是同一种明文
md5 对中文进行加密:
import hashlib m=hashlib.md5() m.update('你好 之华'.encode('utf-8'))#先将中文转成utf-8下的编码 print(m.hexdigest()) 结果: 65b4b8198b8415a5cbfef080b3d0c3ba
5.类的加载顺序:
注意: 1.对象去找类空间中的名字的前提 : 在自己的空间中没有这个名字
2.类 和 对象 存储在两块命名空间里的
3.在操作静态变量的时候应该尽量的使用类名来操作而不是使用对象名
class Student: country = 'China' def __init__(self,name): self.name = name zhang = Student('张尧') zou = Student('邹路') print(zhang.country) Student.country = '法国人' print(zhang.country) zhang.country = '日本人' # 给一个对象添加了一个属性,在自己的内存空间新 #加一个属性,不在去找静态变量 print(zou.country) print(zhang.country) 结果: China 法国人 法国人 日本人
class B: l = [0] def __init__(self,name): self.name = name b1 = B('颜海清') b2 = B('孙晶晶') print(B.l) print(b1.l) print(b2.l) b1.l[0] += 1 print(b2.l[0]) b1.l = [123] print(b2.l) print(b1.l) # 只要是对一个对象.名字直接赋值,那么就是在这个对象的空间内创建了新的属性 # 只要是对一个可变的数据类型内部的变化,那么仍然是所有的对象和类共享这个改变的成果 # 所有的静态变量都是用类名来操作,这样修改就能被所有的对象感知到 # 如果是对于可变数据类型的静态变量 操作的是这个数据内部的内容,也可以使用对象来调用
结果:
[0]
[0]
[0]
1
[1]
[123]