1
Since_I_was_32
这个作者很懒,什么都没留下…
展开
-
Django模板语法
html渲染各种数据类型姓名 {{name}} 年龄{{ age }}{{ students.0 }}{{ students.2 }}{{ info }}{{info.name}}{{info.age}}{{person_list.1.age}}过滤器{{ now|date:"Y-m-d" }}{{ now }}{{ book_list|default:"没有符合条件的书籍"}}{{ file_size|filesizeformat }}{{ article|truncatech原创 2021-05-08 11:21:13 · 99 阅读 · 0 评论 -
Django views视图函数request和HttpResponse
viewsdef index(request):print(“method>>>>>>”, request.method) # 请求方式print(“path>>>>>>>>>”, request.path) # 请求路径print(“GET>>>>>>>”, request.GET) # get请求数据print(“POST>>>>&g原创 2021-05-07 20:35:08 · 158 阅读 · 0 评论 -
django
下载django:pycharm中输入:pip3 install django创建django项目:django-admin.py startproject 项目名称创建应用:python manage.py startapp app名称启动项目:python manage.py runserver IP:PORT项目名称 --manage.py 启动文件 --项目名称 ---settings.py 配置信息 ---urls 路径与视图函数的映射原创 2021-05-05 18:26:02 · 75 阅读 · 0 评论 -
io多路复用/协程
IO多路复用IO多路复用作用:检测多个socket是否已经发生变化(是否已经连接成功,是否已经获取数据(是否可读可写))基于IO多路复用+socket实现并发请求(一个线程100个请求)IO多路复用socket非阻塞 client.setblocking(False)Twisted:python中开源的 基于事件循环实现的异步非阻塞框架非阻塞:不等待异步:执行完某个任务后自动调用我给他的函数操作系统检测socket是否发生变化,有三种模式:select:最多1024个socket;循环去检原创 2021-04-14 12:54:07 · 192 阅读 · 0 评论 -
进程
1 进程写法import multiprocessing def func(arg): print(arg) def run(): for i in range(10): m = multiprocessing.Process(target=func, args=(i,)) m.start() if __name__ == '__main__': run()常用功能原创 2021-04-11 19:03:20 · 89 阅读 · 0 评论 -
threading.local
import threadingimport timev = threading.local()def func(arg):v.phone = argtime.sleep(2)print(v.phone, arg)for i in range(10):t = threading.Thread(target=func, args=(i,))t.start()原创 2021-04-09 18:42:00 · 88 阅读 · 0 评论 -
生产者消费者模型
生产者队列消费者示例import queueimport threadingimport timeq = queue.Queue()def producer(id):“”"生产者:param id::return:“”"while True:time.sleep(2)q.put(‘包子’)print(‘厨师%s生产了一个包子’ % (id, ))for i in range(1, 4):t = threading.Thread(target=producer, args原创 2021-04-09 18:40:00 · 87 阅读 · 0 评论 -
线程池
from concurrent.futures import ThreadPoolExecutorimport timedef task(a1, a2):time.sleep(1)print(a1, a2)创建了一个线程池 (最多5个线程)pool = ThreadPoolExecutor(5)for i in range(40):# 取线程池中申请一个线程,让线程执行task函数 i 和 8 都是 task函数的实参pool.submit(task, i, 8)...原创 2021-04-09 17:36:07 · 72 阅读 · 0 评论 -
锁
1.锁: lock (1次放1个)2.锁: Rlock (1次放1个)3.锁: BoundedSemaphore() (1次放N个,默认1个) 信号量4.锁: Condition() (1次放任意个数,动态的)#############第一种方法#############import threadinglock = threading.Condition()def func(arg):lock.acquire()lock.wait()print(arg)lock.release()原创 2021-04-09 14:44:51 · 144 阅读 · 0 评论 -
线程
import threadingimport timedef func(arg):# time.sleep(arg)t = threading.current_thread()name = t.getName()print(name, arg)t1 = threading.Thread(target=func, args=(2,))t1.setDaemon(True) # 主线程不等t1执行完毕就结束t1.setName(‘t1’)t1.start()t1.join() # 无参数 让原创 2021-04-08 19:23:19 · 83 阅读 · 0 评论 -
小点补充
修改文件名 不报错import shutilshutil.move(‘xxx.txt’, ‘xxxb.txt’) # 修改文件名 win绝对不报错获取文件大小import osfile_size = os.stat(‘path’).st_size # 获取文件大小打印进度条import timedef func(size, total_size):val = int(size / total_size * 100)time.sleep(0.1)print(’\r%s%%|%s’ %原创 2021-04-06 15:14:42 · 78 阅读 · 0 评论 -
socket粘包的处理方法示例
severimport struct # 把有限长度的数字变成4个字节import subprocess # 引入子进程模块import socketsever = socket.socket()sever.bind((‘192.168.3.7’, 9000))sever.listen(5)while 1:print(‘sever working 开始等待链接’)conn, addr = s原创 2021-03-29 18:35:16 · 199 阅读 · 0 评论 -
约束 自定义异常 md5加密 日志
约束基类抛异常约束class Base():def send(self):raise NotImplementedError(".send() 必须重写")class Foo(Base):def f1(self):passdef send(self): passobj = Foo()obj.send()抽象类抽象方法约束from abc import ABCMeta, abstractmethodclass Base(metaclass=ABCMeta): # 抽象类,原创 2021-03-25 15:50:46 · 114 阅读 · 0 评论 -
面向对象大纲
面向对象- 三大特性- 继承- 单继承, 示例:- 多继承, 示例:- super- 封装- 数据封装- 方法封装- 多态- 鸭子模型- 成员- 变量- 实例变量- 类变量- 方法- 实例方法- 类方法- 静态方法- 特殊方法—- 属性- @property 分页- 修饰符- 私有- 编写- 派生类- 公有- 易错点- self内置函数- issubclass- isinstance- type- callable函数和方法的区别反射原创 2021-03-24 13:58:30 · 144 阅读 · 1 评论 -
反射
反射setattr(模块或对象(实例), 成员字符串, 值) # 判断对象动态的设置一个成员(内存)delattr(模块或对象(实例), 成员字符串) # 判断对象动态的删除一个成员(内存)hasattr(模块或对象(实例), 函数名字符串) # 判断是否有这个函数 判断对象中是否有该成员getattr(模块或对象(实例), 函数名字符串) # 找到这个模块的函数 根据字符串为参数,取模块中寻找已知的成员import handlerfrom types import Func原创 2021-03-22 23:45:17 · 86 阅读 · 0 评论 -
issubclass/isinstance/type
#issubclass(Foo,Base) 检查第一个参数是否是第二个参数的子类(子子孙孙) 返回True或Falsetypeclass Foo:passclass Bar:passdef func(*args):count_Foo = 0count_Bar = 0for item in args:if type(item) == Foo:count_Foo += 1elif type(item) == Bar:count_Bar += 1return count_Foo, co原创 2021-03-22 18:07:35 · 98 阅读 · 0 评论 -
面向对象中的特殊成员
主动调用其他类的方法 类名.方法(self) 与继承无关 手动填写selfsuper().f1() 按顺序去父类里找f1函数特殊成员1.类名() 自动执行__init__obj = Foo(1,2)2.对象() 自动执行__call__ (需要在__call__方法里写方法)ret = obj(6,4,2,k1=456)3.对象[‘xx’] 自动执行__getitem__ (需要在__getitem__方法里写方法)ret = obj[‘xx’]4.对象[‘xx’] = 123 自动执原创 2021-03-21 14:24:23 · 207 阅读 · 1 评论 -
类的成员 嵌套
成员成员修饰符 __ (私有)变量class Foo:country = ‘中国’ # 类变量/静态字段def init(self, name): # 方法self.name = name # 公有 实例变量/字段self.__name = 1 # 私有 实例变量/字段def func(self): # 方法pass# obj,Foo类的对象# obj,Foo类的实例obj = Foo(‘name’)obj1 = Foo(‘name1’)print(obj原创 2021-03-18 18:15:33 · 151 阅读 · 0 评论 -
面向对象
面向对象 封装/继承/多态封装1.将相关功能装到一个类中2.将数据封装到一个对象中继承class Superbase:def func3(self):passclass Base(Superbase): # 父类/基类def func2(self):passclass Foo(Base): # 子类/派生类def func1(self):passobj = Foo()obj.func1()obj.func2()obj.func3()原则:先在自己类中找,没原创 2021-03-17 14:30:32 · 102 阅读 · 0 评论 -
模块路径
判断是模块是否被导入import sysprint(sys.modules)import m_ as m 引入模块m_ 命名为mfrom m_ import namefrom m_ import name as n 引入模块内变量 命名为nfrom m_ import * 所有模块内的变量,函数,都可以直接使用all = [‘模块内变量名’] 在模块文件内规定了之后from m_ import * 只能用_all_ 列表中的变量 单独引用不影响模块之间不可以循环引用import imp原创 2021-03-14 22:54:00 · 189 阅读 · 0 评论 -
异常处理
异常处理try:passexcept (ValuesError, IndexError):print(’***’)万能异常 处理try:passexcept Exception as e:print(e)print(’***’)等同 上面可以打印异常,下面简便不能打印异常try:passexcept:print(’***’)异常处理的几种情况try…excepttry…except…elsetry…finallytry…except…finallytry…excep原创 2021-03-14 12:41:54 · 104 阅读 · 0 评论 -
正则表达式
http://tool.chinaz.com/regex 正则表达式在线测试正则表达式:从大段的文字中找到符合规则的内容 判断某个字符串是否完全符合规则只和字符串打交道字符组:[] 写在中括号中的内容,出现在下面某一个字符的位置上都是符合规则的ascii码中 从小到大[0-9][a-z][A-Z][a-zA-Z0-9_]转义符\ \\ \w \w元字符\w 匹配数字字母下划线\d 匹配所有的数字 digit\s 匹配所有的空白 sp原创 2021-03-02 17:51:09 · 66 阅读 · 0 评论 -
遍历文件夹打印所有文件名
遍历 e:/tools 文件夹,打印出所有的文件和普通文件的文件名import osos.listdir(filepath) 打开这个文件夹os.path.join(filepath, file) 链接上一层路径得到该文件的路径os.path.isdir(f_p) 判断该文件是否是文件夹import osdef func(filepath, n): # e:/tools# 1,打开这个文件夹files = os.listdir(filepath)# 2,拿到每一个文件名for file原创 2021-02-28 10:38:59 · 551 阅读 · 0 评论 -
函数补充
1, lambda 匿名函数 只能一行,返回多个值需要(),如果不写()前面是函数地址,后面是值组成的元组a = lambda n : n*ndef func(x, y):return x, ya = lambda x, y: (x, y).name 可以看到函数的名字2, sorted() 排序函数key:排序方案,sorted函数内部会把可迭代对象中的每一个元素拿出来交给后面的key,后面的key计算出一个数字,作为当前这个元素的权重lst = [“西游记”,“三国演义”,“葫芦娃”,“原创 2021-02-27 01:04:55 · 137 阅读 · 0 评论 -
python内置函数
globals()locals()iter()next()range()input()print()id()hash() #目的是为了存储,计算之后是一个数字,hash值尽量的不要重复,在某些特定条件下有可能会重复import os import(“os”)open()help(str) #辅助文档dir(str) # 所有方法名字callable() 是否可以被调用执行 返回 True 和 False, 函数可被调用bool()int()float()comp原创 2021-02-25 00:03:22 · 276 阅读 · 1 评论 -
生成器和推导式
enumerate 枚举lst = [0, 1, 2, 3, 4, 5, 6, 7]for el in enumerate(lst):print(el)lst = [0, 1, 2, 3, 4, 5, 6, 7]for a, b in enumerate(lst,100):print(a, b)生成器def func():yield 1 #return 和 yield都可以返回数据func() # 不会执行函数,拿到的是生成器yield #和return都可以返回数据原创 2021-02-23 20:46:55 · 103 阅读 · 0 评论 -
函数名的应用和闭包
函数名的命名规范和变量是一样的函数名其实就是变量可以作为列表中的元素进行存储,def func1():passdef func2():passlst = [func1, func2]for el in lst:el()可以作为参数传递给函数def func():passdef proxy(fn): #proxy(代理)fn()proxy(func)可以作为函数的返回值def func():def inner(): #inner(内部)pas原创 2021-02-22 23:43:39 · 115 阅读 · 1 评论 -
函数
函数函数是对功能的封装语法:声明 定义函数def 函数名(形参):调用函数函数名(实参)返回值 return如果函数什么都不写,不写return,没有返回值,得到的是None在函数中间或者末尾写return,返回的是None在函数中写return 值, 返回一个值在函数中可以返回多个返回值, return 值1, 值2, 值3, 值4, …,接收的是元组参数函数执行的时候给函数传递信息形参:函数声明的位置的变量实参:函数调用的时候给的具体的值传参:实参交给形参的过程实参:原创 2021-02-20 15:38:35 · 143 阅读 · 1 评论 -
文件操作
文件操作函数open("(路径)文件名", mode="?", encoding=“字符集”)f = open("(路径)文件名", mode="?", encoding=“字符集”)s = f.read()print(s)f.closes = f.readline() 每次读一行s = f.readline().strip() 每次读一行 去掉"\n"f = open("…/b/hahaha.txt", mode=“r”, encoding=“UTF-8”)for line in f原创 2021-02-18 22:37:56 · 80 阅读 · 0 评论 -
set集合和深浅拷贝
set 集合 无序可用来去重复lst = [1,2,3,4,1,2,3,4,5]s = set(lst)lst = list(s)print(lst)[1,2,3,4,5]增加.add.update 迭代添加.update(“abc”) {“a”, “b”, “c”}删除.remove("") 直接删除,不存在会报错.pop() 随机删除 无法选择性删除.clear() 清空改先用.remove("")删除再用.add("")添加原创 2021-02-17 19:51:08 · 305 阅读 · 1 评论 -
补充
补充s = “_”.join([‘ab’, ‘bb’, ‘cc’])print(s)‘aa_bb_cc’s = “_”.join(“abc”)print(s)‘a_b_c’dic = dict.fromkeys(‘abc’, ‘aaa’)和原来的字典没有关系 生成新字典 直接用类名访问print(dic){‘a’: ‘aaa’,‘b’: ‘aaa’,‘c’: ‘aaa’}...原创 2021-02-17 19:47:48 · 66 阅读 · 0 评论 -
字典(键值对数据)
字典dict 用{} 来表示 键值对数据 {key:value} 键 唯一不可重复 都是必须可哈希的 不可变的都可以当 键dic.setdefault(‘火女’, ‘安妮’) 如果有key,value值不变字典删除字典删除没有removedic.pop(‘key’) 返回删除的value值dic.popitem() 随机删除 返回值 一个元组 (key,value)dic.update...原创 2021-02-13 09:56:58 · 2914 阅读 · 0 评论 -
列表增删改查与元组
列表添加.append 列表后面追加.insert(0, “”)插入内容 0位置.extend("")迭代添加 .extend(“abc”) 添加后 lsr[’…’, ‘…’, ‘…’, ‘a’, ‘b’, ‘c’] .extend([“abc”, “de”, “fg”])删除.pop(0) 返回被删除的数据 按位删除.remove("") 删除元素 如果不存在会报错del lst[1:3] 切片删除.clear() 清空改lst[0] = “XX”lst[::]原创 2021-02-12 16:02:31 · 172 阅读 · 2 评论 -
字符串
str 字符串 string常用操作:upper() 变成大写字母strip() 去掉左右两端空白replace() 替换split() 切割startswith() 是否以XXX开头len() 长度,内置函数count(), 数数有多少个find(),找字符,没找到返回-1index() ,找字符,没找到溢出迭代for 变量 in 可迭代对象:循环体表示把可迭代对象中的每一个元素赋值给前面的变量...原创 2021-02-10 11:52:03 · 68 阅读 · 0 评论