Python
专职
人生苦短,我用python
展开
-
自定义实现hashmap-python
hashmap这个数据结构其实并不难,它的结构非常清楚,说白了就是一个定长的链表,这个数组的每一个元素都是一个链表。我们把这个结构画出来,大家一看就明白了。O(M), M为map元素的个数,因为几乎每多一个元素就多一个空间储存,多一个桶或者在桶内多一个位置。headers是一个定长的数组,数组当中的每一个元素都是一个链表。,所以如果我们发生元素的增删改查,本质上都是通过链表来实现的。- get最坏情况:O(n),即链表查询的时间复杂度。,这个号称是所有前后端工程师都会的数据结构。原创 2023-10-03 09:40:57 · 233 阅读 · 0 评论 -
python中通过argparse解析命令行参数
import argparseparser = argparse.ArgumentParser()parser.add_argument("–host", nargs="?", type=str, default=“127.0.0.1”, help=“binding ip”)parser.add_argument("–port", nargs="?", type=int, default=50051, help=“the listening port”)args = parser.parse_arg原创 2022-02-19 11:26:24 · 773 阅读 · 0 评论 -
python日志库文件loguru讲解
from datetime import datetimefrom loguru import loggerfrom loguru_test_02 import hello# 关闭默认终端输出日志logger.remove(handler_id=None)# 一天一个日志文件file_name = datetime.now().strftime("%Y%m")# 配置日志输出到log目录下的当天日期文件# rotation 滚动记录日志文件# 每500MB生成一个新的文件,如果一个原创 2022-02-14 18:07:12 · 893 阅读 · 1 评论 -
python的.gitignore文件
# ---> Python# Byte-compiled / optimized / DLL files__pycache__/*.py[cod]*$py.class# C extensions*.so# Distribution / packaging.Pythonbuild/develop-eggs/dist/downloads/eggs/.eggs/lib/lib64/parts/sdist/var/wheels/pip-wheel-metadata原创 2022-02-13 19:36:13 · 2641 阅读 · 2 评论 -
python中日期格式和时间戳格式的转换
import time from datetime import date # 时间转换成时间戳 d = date(2022, 3, 18) timeArray = time.strptime(str(d), "%Y-%m-%d") print(timeArray) print(timeArray.tm_year) ret = int(time.mktime(timeArray)) print(ret) # 时间戳转换成时间...原创 2022-02-13 16:44:15 · 5832 阅读 · 0 评论 -
python生成指定长度的随机字符串
from random import SystemRandomSALT_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"def gen_salt(length): sys_random = SystemRandom() return "".join(sys_random.choice(SALT_CHARS) for i in range(length))print(gen_sal.原创 2021-12-27 14:33:17 · 1276 阅读 · 1 评论 -
python中列表或字典当做函数默认值参数的坑
class Foo(object): def __init__(self, l2=[]): # 默认值在定义函数时计算(通常在加载模块时) self.l2 = l2foo = Foo([11, 22])foo.l2.append(33)print(foo.l2) # [11, 22, 33]print(id(foo.l2)) # id:1894349868672foo = Foo()foo.l2.append(55)print(foo.l2) # [55.原创 2021-12-10 15:11:46 · 391 阅读 · 0 评论 -
pip install 报错could not find a version that satisfies the requirement kafka-python解决办法
解决办法:pip install kafka-python -i http://pypi.douban.com/simple --trusted-host pypi.douban.c原创 2021-10-19 14:09:25 · 710 阅读 · 0 评论 -
python中如何后台运行一个python脚本
nohup python -u xxx.py > nohup.log原创 2021-09-11 23:44:16 · 764 阅读 · 0 评论 -
python中带参数的万能装饰器两种实现方法
1. 类实现from functools import wrapsimport timeclass Decorator(object): def __init__(self, num): self.num = num def __call__(self, func): @wraps(func) def inner(*args, **kwargs): start_time = time.time()原创 2021-09-11 09:07:28 · 330 阅读 · 0 评论 -
python threading模块的Lock和RLock区别
1. Lock和RLock概念Lock:Lock被称为①原始锁,原始锁是一个②在锁定时不属于特定线程的同步基元组件,它是能用的最低级的同步基元组件。原始锁处于 "锁定" 或者 "非锁定" 两种状态之一。它被创建时为非锁定状态。它有两个基本方法,acquire()和release()。当状态为非锁定时,acquire()将状态改为锁定并立即返回。当状态是锁定时,acquire()将阻塞至其他线程调用release()将其改为非锁定状态,然后acquire()调用重置其为锁定状态并返...原创 2021-09-06 18:26:40 · 1263 阅读 · 0 评论 -
python中闭包的应用场景
一、闭包的应用场景1. 当做计算器使用2. 统计函数的被调用次数3. 当做装饰器使用二、应用场景代码def calculate(): """当做计算器使用""" num = 0 def add(value): nonlocal num # 内嵌作用域需要使用nonlocal关键字 num += value return num return addadd1 = calculate()print原创 2021-09-05 15:50:10 · 1345 阅读 · 0 评论 -
python内置创建虚拟环境的命令
python -m venv test_venvpython2 -m venv test_venv2python3 -m venv test_venv3原创 2021-08-31 10:10:58 · 69 阅读 · 0 评论 -
python-dateutil日期模块使用
1. 概述它是对datetime模块的高级扩展2. 相对增量示例from datetime import datetime, datefrom calendar import monthrangefrom dateutil.relativedelta import relativedelta, MO, TU, WE, TH, FR, SA, SU# 存储一些值NOW = datetime.now()TODAY = date.today()# 下个月NEXT_MONTH = N原创 2021-08-23 10:14:15 · 754 阅读 · 0 评论 -
python中自定义实现上下文管理器
1. 实现上下文管理器的第一种方法上下文管理器对象里面必须实现了两个方法;__enter__方法和__exit__方法class File(object): """自定义实现上下文管理器""" def __init__(self, filename, mode): self.filename = filename self.mode = mode def __enter__(self): self.f = open(sel.原创 2021-08-22 12:28:01 · 348 阅读 · 0 评论 -
python-property属性用法
概述:定义property属性有两种方式:(1)装饰器 (2)类属性1. python2经典类中的用法,只能获取class Pager(object): def __init__(self, current_page): self.current_page = current_page self.per_items = 10 @property def start(self): return (self.c...原创 2021-08-21 17:27:51 · 137 阅读 · 0 评论 -
python-多继承和__mro__
1. 通过父类名调用父类中的方法class Parent(object): def __init__(self, name): print("Parent的init开始被调用") self.name = name print("Parent的init结束被调用")class Son1(Parent): def __init__(self, name, age): print("Son1的init开始被调用")原创 2021-08-21 11:04:42 · 112 阅读 · 0 评论 -
jwt详解
1. 概念JSON Web Tokens,是一种开发的行业标准RFC 7519,用于安全的表示双方之间的声明。目前,jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目。2. 传统token方式和jwt在认证方面有什么差异? 传统token方式 用户登录成功后,服务端生成一个随机token给用户,并且在服务端(数据库或缓存)中保存一份token,以后用户再来访问时需携带token,服务端接收到token之后,去数据库或缓存中进行校验token的是否超时、是否合法。 ..原创 2021-07-30 17:26:06 · 217 阅读 · 0 评论 -
PowerShell 激活 activate 命令切换Python虚拟环境
1. power shell 中输入:Set-ExecutionPolicy RemoteSigned2. jih原创 2021-06-21 13:29:10 · 552 阅读 · 0 评论 -
python中使用数据库连接池DBUtils
安装依赖pip install pymysqlpip install DBUtilsDBUtils是Python的一个用于实现数据库连接池的模块。方法(1):为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放到连接池,供自己线程再次使用。当线程终止时,连接自动关闭。import pymysqlfrom dbutils.persistent_db import PersistentDBPOOL = PersistentDB( creator=原创 2021-05-22 13:54:42 · 1542 阅读 · 0 评论 -
python中基于pymysql实现增删改查
import pymysqlclass SQLHelper(object): @staticmethod def open(): conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="123456", db="master") # cursor = pymysql.cursors.DictCursor: 查询出的数据返回类型为字典,如果不写返回的是元组 .原创 2021-05-22 12:09:51 · 79 阅读 · 0 评论 -
python中itsdangerous的用法
from itsdangerous import TimedJSONWebSignatureSerializer, Serializer, JSONWebSignatureSerializer# 1. JSONWebSignatureSerializer的用法# s = JSONWebSignatureSerializer("abczyx123987", salt="fljklajsdfljdasjkl4653479879eqwr", algorithm_name="HS384")# ret = .原创 2021-05-19 18:04:12 · 343 阅读 · 0 评论 -
python中的threading.local详解
1. 不使用threading.local之前由于多线程共享全局变量,所以一个线程拿到的全局变量的值未必是当时自己修改后的值,有可能在拿到全局变量之前其它线程也对该全局变量进行了修改,原因是线程的调度是由操作系统决定的,如下:from threading import Thread, get_identimport timenum = 0def task(arg): # get_ident()返回的就是每一个线程的唯一标识 print(get_ident())原创 2021-05-15 10:36:21 · 3869 阅读 · 2 评论 -
python中如何自定义一个序列化类支持序列化date、datetime、Enum类型的数据
1. 默认的json.dumps()不支持序列化日期类型、日期时间类型或枚举类型,如果想让其支持,我们需要自定义序列化类2. 代码import jsonfrom enum import Enumfrom datetime import date, datetimefrom typing import Any, Callableclass CustomJsonEncoder(json.JSONEncoder): """自定义json序列化类实现序列化datetime、date、E原创 2021-05-11 09:42:25 · 314 阅读 · 0 评论 -
Python类的__getattr__和__setattr__和__delattr__特殊方法的使用
class Foo(object): def __init__(self, name): self.name = name def __setattr__(self, key, value): """添加/修改属性会触发它的执行""" print("__setattr__执行了") self.__dict__[key] = value def __getattr__(self, item): """.原创 2021-05-09 14:45:03 · 195 阅读 · 0 评论 -
Python类的__getitem__和__setitem__特殊方法的使用
1. python中当调用一个对象的 obj["name"] = "admin" 或者 obj["name"]的时候,说明该对象要么是字典,要么类中实现了__setitem__方法和__getitem__方法2. 字典class Foo(dict): passfoo = Foo()foo["name"] = "admin"print(foo3.类中实现了__setitem__方法和__getitem__方法class Foo(object): def __..原创 2021-05-05 17:11:13 · 940 阅读 · 0 评论 -
python中使用python-dotenv管理环境变量
创建环境变量存储文件.flaskenv和.env.flaskenv存储和Flask相关的公共环境变量, 例如FLASK_APP .env用来存储包含敏感信息的环境变量, 比如用户名和密码1. 安装python-dotenvpip install python-dotenv2. 新建.env文件,内容以键 = 值得方式写:key = valuea = 11b = "安徽烦得很"3. 加载并获取环境变量import osfrom pathlib import Pa.原创 2021-04-28 13:14:43 · 1648 阅读 · 3 评论 -
python中如何使用云片网发送短信验证码
1. 在apps包下新建一个utils的python包2. utils包中新建一个YunPian.py文件,文件中代码如下import requestsimport jsondef send_single_sms(apikey, code, mobile): # 发送单条短信 url = "https://sms.yunpian.com/v2/sms/single_send.json" text = "【后端学习】您的验证码是{}。如非本人操作,请忽略本短信".fo原创 2021-01-16 14:32:52 · 486 阅读 · 7 评论 -
windows下如何安装python虚拟环境
1. 安装virtualenvpip install virtualenv2. 安装虚拟环境virtualenv new_venv3. 进入new_venv下的Scripts下,激活虚拟环境activate4. 安装第三方包在虚拟环境pip install django5. 退出虚拟环境deactivate原创 2021-04-20 11:58:59 · 179 阅读 · 0 评论 -
python中如何实现微信分享功能
1. 微信公众平台申请测试号http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login2. 代码如下:import requestsimport hashlibimport timefrom flask import Flask, render_templatefrom flask import Markupfrom flask import redirectfrom flask import requestfro原创 2021-04-19 14:00:46 · 723 阅读 · 0 评论 -
python中实现微信登录
视频效果:flask项目实现微信登录1. view代码from flask import Flask, render_templatefrom flask import Markupfrom flask import redirectfrom flask import requestfrom flask import jsonifyfrom python_weixin_master.weixin.client import WeixinAPI# from python_wei原创 2021-04-18 16:57:23 · 7646 阅读 · 2 评论 -
如何升级pip版本
easy_install --upgrade pip原创 2021-04-18 10:38:10 · 2323 阅读 · 0 评论 -
python中functools.partial详解
1. 函数的用法import functoolsdef add(num1=0, num2=0): return num1 + num2add2 = functools.partial(add, num1=10, num2=20)print(add2(num2=15)) # 输出252. 类的用法import functoolsclass Students(object): def __init__(self, name, age, gender):.原创 2021-04-15 18:41:21 · 672 阅读 · 0 评论 -
python中asyncio异步编程教程3-案例
1. 异步操作redis当通过python去操作redis时,链接、设置值、获取值 这些都涉及网络IO请求,使用asycio异步的方式可以在IO等待时去做一些其他任务,从而提升性能。安装Python异步操作redis模块 pip3 install aioredis案例1:import asyncioimport aioredisasync def execute(address): print("开始执行", address) # 网络IO操作:创建redis...原创 2021-04-06 13:36:22 · 274 阅读 · 0 评论 -
python中asyncio异步编程教程2
1. asyncio中的Future对象asyncio中的Future对象是一个相对更偏向底层的可等待对象,通常我们不会直接用到这个对象,而是直接使用Task对象来完成任务的并发和状态的追踪。( Task 是 Futrue的子类 )Future为我们提供了异步编程中的 最终结果 的处理(Task类也具备状态处理的功能),Task对象内部await结果的处理基于Future对象来的。示例1:import asyncioasync def main(): # 获取当前事件循环原创 2021-04-06 10:34:12 · 1601 阅读 · 0 评论 -
python中asyncio异步编程教程1
1. 想学asyncio,得先了解协程携程的意义:计算型的操作,利用协程来回切换执行,没有任何意义,来回切换并保存状态反倒会降低性能。 IO型的操作,利用协程在IO等待时间就去切换执行其他任务,当IO操作结束后再自动回调,那么就会大大节省资源并提供性能,从而实现异步编程(不等待任务结束就可以去执行其他代码)2. 协程和多线程之间的共同点和区别:共同点:都是并发操作,多线程同一时间点只能有一个线程在执行,协程同一时间点只能有一个任务在执行;不同点:多线程,是在I/O阻塞时通过...原创 2021-04-05 14:50:37 · 1286 阅读 · 2 评论 -
python中md5加密和sha1加密详解
def md5(user): import hashlib import time ctime = str(time.time()) m = hashlib.md5(bytes(str(user), encoding="utf-8")) m.update(bytes(ctime, encoding="utf-8")) return m.hexdigest()原创 2021-03-30 12:21:37 · 1142 阅读 · 0 评论 -
python中如何按照长的相加两个列表
l1 = [11, 2, 3]l2 = [5, 3]def _map(l1, l2): l1_length = len(l1) l2_length = len(l2) min_lengt = min(l1_length, l2_length) for x in range(min_lengt): yield l1[x] + l2[x] if l1_length < l2_length: temp = l2[min_lengt:] ..原创 2021-03-22 14:21:41 · 267 阅读 · 0 评论 -
python中生成随机验证码的方法-可自定义验证码位数与验证码组合种类
直接上代码吧,执行即可生成import stringfrom random import choicedef generate_random(random_length, type): ''' 随机字符串生成函数 :param random_length:字符串长度 :param type:字符串类型(0:纯数字 or 1:数字+字符 or 2:数字+字符+特殊字符) :return:生成的随机字符串 ''' # 随机字符串种子原创 2021-01-16 19:11:42 · 366 阅读 · 0 评论 -
python中open、os、shutil操作文件文件夹的用法
1. open模式 描述 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。原创 2020-09-11 17:34:23 · 364 阅读 · 0 评论