python学习笔记——资料来源于廖雪峰老师

# usr/bin/env python3
# -*- coding: utf-8 -*- # -*- 2021/2/8 -*- # 生成器 # 杨辉三角 def triangles(): s = [1] i = 2 while True: yield s # 相当于表示存储的值,但是是计算出来的 t = [] for j in range(i): if j == 1 or j == i - 1: t.append(1) else: t.append(s[j] + s[j - 1]) s = t i = i + 1 result = [] n = 0 for x in triangles(): if n == 10: break print(x) n = n + 1 # 递归 # 汉诺塔 def move(n, a, b, c): if n == 1: print(a, '-->', c) else: move(n - 1, a, c, b) # 把n-1个盘子借助c移到b move(1, a, b, c) # 把剩下的一个盘子移到c move(n - 1, b, a, c) # 把b上的n-1个盘子借助a移到c # 切片 # 去空格 def trim(s): while s[:1] == ' ': s = s[1:] while s[-1:] == ' ': s = s[:-1] # 列表生成 g = [x * x for x in range(1, 5)] # g=[1,4,9,16] g = [x * x for x in range(1, 5) if x % 2 == 0] # g=[4,16] if在后面没有else,是为条件 g = [x if x % 2 == 0 else -x for x in range(1, 5)] # g=[-1,2,-3,4] if在前面要有else,是为选择 # 大写字母改为小写字母 s = ['Ajdi', 'dwi', 'sSDM', 12, 'DEQ'] g = [x.lower() if isinstance(x, str) else x for x in s] # g=['ajdi','dwi','ssdm',12,deq'] # -*- 2021/2/9 -*- # map def f(x): return x * x L1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] S = map(f, L1) print(L1, list(S)) r=list(map(str,L1)) # r = ['1','2','3','4','5','6','7','8','9'] # -*- 2021/2/17 # range:list/tuple/set/dict #list L=list(range(5)) # [0, 1, 2, 3, 4] L.append(5) # [0, 1, 2, 3, 4, 5] L.pop() #删除末尾 L.pop(i) #删除第i位 L[i]=value #第i位值变化,value可以是一个list,可以是数字,可以是字符串 L[:]=L[::]=L[::1] #步长为1 [0, 1, 2, 3, 4, 5] L[::-1] #步长为-1 [5,4,3,2,1,0] 等于L[-1:0:-1] L[:-1] #[0, 1, 2, 3, 4],为L[0:5] #tuple 定义之后值不可更改 里面的值为list的部分可以修改 T=tuple(range(5)) # (0, 1, 2, 3, 4, ['X','Y']) T[5][1]='x' T[5][0]='y' print(T) # (0, 1, 2, 3, 4, ['y','x']) #dict D={'Michale':89, 'Joe':98} #字典初始化赋值 D['key']='value' #增加字典 #set 与dict相比 只有key 没有value S=set(range(5)) # {0, 1, 2, 3, 4} # -*- 2021/2/19 -*- #字符串 #格式化 print('%s,%s'%('Hello','World')) #%2d:整数,占两位(02d%,占两位,空位补0) %.2f:浮点数,2位小数 %s:字符串 %x:16进制数 #f-string s=(100*5+95*3)/8 m='xiao.ming' print(f'{m} is a good student, his GPA is {s:.2f}') s.split('.') #把字符串中的'.'去掉,分割为几个部分,['xiao','ming'] s='shan.shui.jian' s.split('.',1) #['shan','shui.jian'] s.split('.',2) #['shan','shui','jian'] DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} name = ['adam', 'LISA', 'barT'] def normalize(name): result = name[0:1].upper() + name[1:].lower() return result print(list(map(normalize, name))) #['Adam', 'Lisa', 'Bart'] def str2float(s): t=s.split('.') def fq(a,b): return a+b def str2num(s): return DIGITS[s] def fn(x,y): return 10*x+y temp=reduce(fq,t) return reduce(fn,map(str2num,temp))/(10**len(t[1])) cesh='123.456' print(str2float(cesh)) #123.456(浮点数) # -*- 2021/2/20 -*- #filter()筛选函数 def fn_three(): n=1 while True: yield n n=n+1 t=filter(lambda x:x%3==0,fn_three()) #筛选出3的倍数的惰性序列 for n in t: if n<17: print(n) else: break #得到结果[3,6,9,12,15] #sorted()排序函数 lists=[12,-15,56,78,-22] sorted(lists) #[-22, -15, 12, 56, 78] sorted(lists,key=abs,reverse=True) #[78, 56, -22, -15, 12] #闭包 def fun_sum(*args): def sum1(): ax = 0 for n in args: ax = ax + n return ax return sum1 f1 = fun_sum(1, 3, 5, 7, 9) print(f1()) def createCounter(): i = 0 def counter(): nonlocal i # 用nonlocal声明一个变量i在上级函数中有定义 i = i + 1 return i return counter counterA = createCounter() print(counterA(), counterA(), counterA(), counterA(), counterA()) # 1 2 3 4 5 counterB = createCounter() if [counterB(), counterB(), counterB(), counterB()] == [1, 2, 3, 4]: print('测试通过!') else: print('测试失败!') #<<<counterA==counterB #False #函数定义之参数问题 def temp(kind, *args, **kw): print(kind) for i in args: print(i) for i in kw: print(i, ':', kw[i]) # kind 为一个元素,args为元组(非关键字参数),kw为字典(关键字参数) # for example: temp('I am a student', 'Ha Ha, I am a teacher!', 'You are very nice!', Clite='Michale', book='Jane', HALLA='blie') #得到结果 # I am a student # Ha Ha, I am a teacher! # You are very nice! # Clite : Michale # book : Jane # HALLA : blie #-*- 2021/2/21 -*- #装饰器decorate import time import functools def temp(func1): @functools.wraps(func1) #作用是使传入的参数func1函数的函数名作用后不会改变为wrapper def wrapper(*args, **kwargs): print('this is a %s' % func1.__name__) return func1(*args, **kwargs) return wrapper @temp def temp2(): print('I know that!') #结果 #this is a temp2 #I know that! #偏函数 #简单总结functools.partial的作用就是: #把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。 import functools int2=functools.partial(int,base=2) #int('455',base=16) 表示455为16进制数,转化为为10进制数 print(int2('1110')) #结果为14 #OOP面向对象编程 class Student(object): def __init__(self, name, score): self.name = name self.score = score def print_score(self): print('%s:%s' % (self.name, self.score)) lisa = Student('lisa', 89) Bart = Student('Bart',99) lisa.age=21 #可以只有添加某一个实例的属性,但不影响抽象的类 print(lisa.age) #21 print(Bart.age) #出错,Bart没有age这一属性 lisa.print_score() #lisa:89 #继承和多态 class Animal(object): def run(self): print('Animal is running...') class Dog(Animal): def run(self): print('Dog is running...') class Cat(Animal): def run(self): print('Cat is running') class Stone(Animal): pass cat=Cat() dog=Dog() stone=Stone() animal=Animal() cat.run() dog.run() animal.run() stone.run() #类型查看 isinstance(dog,Dog)->True isinstance(123,str)->False isinstance(b'a',bytes)->True # isinstance([1,2,3],(list,tuple)) 是否为list或者tuple # dir(dog) 得到dog对象的所有属性和方法 # obj.__len__()等价于len(obj) # 配合getattr()、setattr()以及hasattr()使用 # for example: class MyObject(object): def __init__(self): self.x=9 def power(self): return self.x * self.x obj=MyObject() hasattr(obj,'x') # 有属性x吗 True hasattr(obj,'y') # 有属性y吗 Flase setattr(obj,'y',19) #设置一个属性y hasattr(obj,'y') # True getattr(obj,'y') #获取属性y 等价于obj.y #可以传入一个默认值default,如果不存在该属性,返回一个default getattr(obj,'z',404) #不存在z属性,返回404 #也可以判断是否有某一方法 hasattr(obj,'power') #True fn=getattr(obj,'power') fn() # 81 等价于Obj.power() #实例属性和类属性 class Student(object): count = 0 # count是属于Student这个类的 实例属性 def __init__(self, name): self.name = name #类属性 Student.count += 1 # 每创建一个实例,count的值就会加1 class Student(object): __slots__ = ('name', 'age') #只允许实例添加name属性和age属性 注意:仅对当前类的实例有限制作用,对子类失效 #动态添加方法需要导入types模块的MethodType方法 from types import MethodType #可以为实例和类动态添加方法 class Student(object): def __init__(self,name) self.name=name def set_age(self,age): self.age=age s=Student('Joe') s.set_age=MethodType(set_age,s) # 为实例s添加方法set_age s.set_age(21) print(s.age) # 21 Student.set_age=MethodType(set_age,Student) # 为类Student添加方法 s.set_age(21) print(s.age) # 21 raise ValueError('score must be an integer!') #提示错误 #把方法封装为一个属性,可以方便对数据的修改,又可以对输入的数据做一定的限制 class Student(object): @property def score(self): return self._score @score.setter #若不定义setter,只能读出,不能写入 def score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 ~ 100!') self._score = value s=Student() s.score=90 # 对 s.score=999 #报错 # age为只读属性,birth为读写属性 class Student(object): @property def birth(self): return self._birth @birth.setter def birth(self, value): self._birth = value @property def age(self): return 2021 - self._birth s = Student() s.birth = 2000 print(s.birth) print(s.age)

  

posted @ 2021-02-21 21:09  书亦非书  阅读(66)  评论(0)    收藏  举报