
Python
Python语言相关技术
夕阳惜夏
这个作者很懒,什么都没留下…
展开
-
python扁平化处理嵌套序列的好办法
python协程原创 2022-07-29 16:55:48 · 408 阅读 · 1 评论 -
python连乘
python实现连乘原创 2022-07-29 16:45:57 · 2198 阅读 · 1 评论 -
中介模式(python)
"""中介模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用, 从而使其耦合松散,而且可以独立地改变他们之间的交互"""class HouseInfo: """房源信息""" def __init__(self, area, price, has_window, has_bathroom, has_kitchen, address, owner): self.__area = area self._...原创 2022-05-19 16:59:52 · 450 阅读 · 0 评论 -
python内置setattr函数赋值时会跳过定义的setter方法吗?
python内置setattr函数赋值时会跳过定义的setter方法吗?原创 2022-04-25 23:49:33 · 1013 阅读 · 0 评论 -
搞懂Python协程
什么是协程?协程是指一个过程,这个过程与调用方协作,由调用方提供的值进行产出。流畅的PythonLuciano Ramalho大佬的这个解释真是有点抽象。直观来看,如果把“协程”替换成“函数”,这段话也读的通,而且好像更容易理解。细细读来,感觉大佬想表达的意思主要集中在“协作”一词上。协程是怎么协作的?我对协程的第一映像是,只要把函数的return关键字改成yield,就把函数定义成了协程,所以关键还是得理解yield关键字的作用在词典中,yield有产出和让步两种意思,原创 2022-04-15 00:10:15 · 410 阅读 · 0 评论 -
策略模式(Python一等函数实现)
"一等函数"这个词其实有点坑,听起来有点像特指某一部分函数,但是其实所有函数都是一等函数。编程语言理论家把“一等对象”定义为满足下述条件的程序实体:在运行时创建 能赋值给变量或数据结构的元素 能作为参数传给函数 能作为函数的返回结果---《流畅的Python》第5章 一等函数所以可以看出,所有函数都是一等对象,所以叫做“一等函数”。策略模式由三个部分组成:上下文:把一些计算委托给实现不同算法的可互换组件(具体策略),它提供服务 策略:实现不同算法的组件共同的接口 具体原创 2022-01-14 16:47:40 · 638 阅读 · 0 评论 -
使用yield from
代码引自《流畅的Python》16.7 使用yield from 一节为什么书中的案例里最后没有按预期收集到数据?因为子生成将return语句写到了循环内,所以调用方每次send()值到子生成器都会返回Result对象到委派生成器grouper,导致结果覆盖。而最后一次send(None)触发子生成器退出循环时,又相当于子生成器做了一次return None,将委派生成器中结果进行覆盖,所以最终收集到的数据每个键的值都是None如果将子生成器的return语句放到循环之外,那么知道调用方se原创 2021-12-15 14:29:37 · 803 阅读 · 0 评论 -
一个数据处理场景的基类
大多数数据处理场景中,都是针对一个数据集执行特定的逻辑,然后将结果保存。我记录的这个类,是以Python实现,以MySQL实现存储。在大量数据库io场景下,使用连接池可以实现异步io、连接资源重用、避免连接中断问题。实现连接池的方式有多种,可以用sqlalchemy实现,下面记录的是以PooledDB的实现# DBUtils 2.0.2# PyMySQL 1.0.2import pymysqlfrom dbutils.pooled_db import PooledDBfrom conc原创 2021-08-28 13:43:46 · 133 阅读 · 0 评论 -
python 线程池ThreadPoolExecutor
背景最近项目中需要抽取数据库中某些数据组成一个缓存表,SQL倒是不复杂就是单纯的慢,慢到navicat跑崩了也没跑出来,然后就想着用python写脚本,根据时间字段做异步查询代码数据库连接写成伪码,过程抽象一下就是这样import timeimport pandas as pdfrom concurrent.futures import ThreadPoolExecutor# 需要保存的字段,sql中已查询FIELDS = ["FIELDS_1", "FIEL原创 2020-12-26 00:10:53 · 1011 阅读 · 1 评论 -
python操作redis
from redis import Redisclient = Redis(host="REDIS_HOST", port='REDIS_PORT', db='REDIS_DB', password='REDIS_PASSWORD')# 查询键value = client.get("KEY_NAME")# 写入键client.set("KEY_NAME", "VALUE")client.close().原创 2020-12-17 21:27:05 · 95 阅读 · 0 评论 -
python操作mongodb
mongodb对于非结构化数据存储来说,是一个非常好用的数据库,值得记录下基本操作,后续内容待丰富~import pymongoclient = pymongo.MongoClient(host='MONGO_HOST', port='MONGO_PORT', username='MONGO_USER', password='原创 2020-12-17 21:16:20 · 130 阅读 · 0 评论 -
python操作postgres
背景想在个人电脑上验证一些sql优化、各种主键的效果,只有在数据到达一定量级,效果才能明显的体现出来。所以第一步需要往数据库中写入大量数据写入数据值得注意的是,postgres建表时是区分大小写的,但是在查询的时候又是不区分大小写的,就像把写在sql里的大写自动替换成小写。建表SQLCREATE TABLE public.sell( id integer NOT NULL DEFAULT nextval('sell_id_seq'::regclass), name c原创 2020-12-17 20:51:21 · 2619 阅读 · 1 评论 -
python except无法捕获同名异常
看到这个标题的人估计和我遇到这个问题的时候一样蒙蔽。简而言之,就是在try里面抛出A异常,但是except A却捕获不到场景custom_exception.py 自定义异常KnownException用来抛出给用户的各种提示class KnownException(Exception): passtest_module.py 逻辑里面抛出了KnownExceptionfrom custom_exception import KnownExceptiondef run原创 2020-12-14 20:34:44 · 892 阅读 · 0 评论 -
python爬虫任务上传脚本
场景使用scrapy_redis写爬虫时,需要向redis写入初始url才能启动爬虫。当工程下爬虫名多了之后,还是以脚本的方式实现方便一点脚本import sysimport redisREDIS_HOST = "redis host"REDIS_PORT = 6379REDIS_DB = 0REDIS_PWD = "redis password"spiders = { 'spider_name1': "url1", "spider_name2": "url2"原创 2020-12-13 12:35:27 · 262 阅读 · 2 评论 -
python爬虫数据提取脚本
背景使用scrapy_redis框架时,为了利用redis高效的io,通常回把数据放到redis上。在任务结束后则需要将redis里的结果数据迁移。场景将爬虫数据从redis迁移到mongodb,并且提取生成一份excel格式的文件使用方法参数2:指定爬虫结果集参数3~:指定指定结果集中键在excel中的别名python export.py [spider_name]:items redis_key1=excel_title1redis_key2=excel_title2.原创 2020-12-13 12:27:08 · 1061 阅读 · 0 评论 -
python魔法方法
python魔术方法是特殊方法的昵称。它是简单而又强大,为了被python解释器调用而存在的方法。python提供丰富的元对象协议,让语言的用户和核心开发者拥有并使用同样的工具例子引用《流畅的Python》- 一摞python风格的纸牌import collections# namedtuple用来构建只有少数属性但是没有方法的对象Card = collections.named...原创 2019-12-23 17:02:50 · 275 阅读 · 0 评论 -
Python迭代器和生成器
迭代:访问集合元素的一种方式迭代器:可以记录当前迭代位置的对象可迭代对象:可以通过for ... in ...之类的语句依次获取其中一条数据的对象可迭代对象如下代码中,isinstance函数可以判断一个对象是否为可迭代对象from collections import Iterableprint(isinstance([], Iterable))# True也可...原创 2018-12-22 14:12:03 · 831 阅读 · 1 评论 -
TCP的recv问题
TCP编程时,recv()函数默认阻塞等待,返回socket携带的信息,要根据业务场景设计recv的等待和结束机制:recv阻塞,以接收空字符串结束如下TcpServer.py,为通常的recv机制: 因为客户端单次send数据长度可能超过设置的1024,所以把recv放到循环体内,以保证接收数据流的完整性。 但是不可能让recv一直阻塞等待这里,通常的做法就是判断数据长度为空则退...原创 2018-11-23 14:59:19 · 4523 阅读 · 0 评论 -
Python装饰器(&闭包)
Python有一个强大的特性—装饰器,它可以给已经实现的代码块(函数)包裹上自己想要添加的功能,而不用考虑函数内是怎么实现的阐述装饰器之前可以先了解一下Python另一个特性—闭包闭包闭包是在函数内再定义一个函数,并且提供了子函数需要的变量,这样可以把子函数与其用到的变量叫做闭包def line_para(a, b): def line(x): re...原创 2018-12-17 23:35:22 · 562 阅读 · 0 评论