HiKariのTechLab

光の技术屋


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 搜索

【GitHub探索】python调试利器——pysnooper源码分析

发表于 2019-05-25 | 更新于 2024-04-07 | 分类于 GitHub探索

前言

这次又开了个新坑——GitHub探索,主要内容是试水当期GitHub上较火的repo

虽然top榜上各路新手教程跟经典老不死项目占据了大半江山,但清流总是会有的。

第一期就试水一下pysnooper吧,一个新奇实用的python调试器。

顺便源码分析一波,了解下python的debug操作。

废话不多说,进入正题~

pysnooper使用效果

通常,我们可以在函数上用pysnooper.snoop装饰器,给这个函数包装一个额外功能,实现在标准错误流打印函数debug信息的效果。比如说:

阅读全文 »

【Easy Python】最终话:重回首知识点,让python真正easy!

发表于 2019-05-19 | 更新于 2024-04-07 | 分类于 Easy Python

前言

Easy Python终于来到完结,我的领导也夸奖我写作非常的卖力用心。对此,我深表欣慰!

六章Python讲解,并不单纯是切磋代码技艺,而更是注重于每一行代码背后发生的事儿

为此,让我们一起重回首Easy Python系列,光荣收尾吧!

回顾

阅读全文 »

【Easy Python】第六话:multiprocessing——Python多进程并行

发表于 2019-05-11 | 更新于 2024-04-07 | 分类于 Easy Python

前言

前段时间,我和我的领导回到了母校,和我的师父师母聚餐。聚餐点了很多东西,大碗宽面,牛肉炒饭,韩国烤肉,吃都吃不完。虽然我的领导最近长得比以前p了些,但是吃饭速度还是慢悠悠。唉,要是我的领导能有个三头六臂,每个手都夹菜,每个头都去啃,那吃饭速度可就蹭蹭地涨上去了啊!

人无法三头六臂,但在Python里,我们可以做到。

并发&并行实验

要想实现三头六臂的效率,不走单一顺序流,我们不仅需要让多个任务能够并发(Concurrent),还能够并行(Parallel)运作。

假使吃饭吃到一半,人有三急,摘花回来继续用膳,那么如果把“吃饭”与“解手”当作两个任务,那么它们便是便是并发运作,但不并行。如果太追求效率,蹲坑恰饭,那便即是并发,也是并行了。

在Python中,我们可以用三种方式实现并发。但是并不是所有的方法,都支持并行。

这三种方法是:

阅读全文 »

【DIY小记】踏平Win10升级之坑——我们无法更新系统保留的分区

发表于 2019-05-01 | 更新于 2024-04-07 | 分类于 DIY小记

前言

前几天心血来潮,想把自己船上的Win10更新到18年10月的版本(1809),结果易升下载了更新之后,安装时提示“我们无法更新系统保留的分区”,于是一脸懵逼。

我们无法更新系统保留的分区

坑也是要慢慢踩的。熬了两夜,终于成功解决了这个问题,将Win10升级到了最新版本。

踩坑记录

原因分析

遇到这个问题后,笔者第一时间google百度了下解决方案,看到了以下几条:

阅读全文 »

【Lua杂谈】探索C API,开坑lnodelist

发表于 2019-04-20 | 更新于 2024-04-07 | 分类于 Lua杂谈

前言

最近一直在探索Lua的C API编程部分,上次实现了一个函数执行时间统计库:lfunctimer,这次就果断写了一个lnodelist来玩玩。在这期间,遇到了许多纠结的问题,因此果断做下分享~

测试用例现在贼少= =想要试用的同学可以走lnodelist的Github传送门,或者luarocks install lnodelist,就可以开始干起~

在Lua里,table充当着array以及hashmap两个角色,提供了简单的insert、remove、concat等功能。lnodelist则是独立于table之外建立一个崭新的list/array数据结构,暂时是一个双向链表。API的需求上,则兼并java的LinkedList跟js的array两种体系,列表如下:

阅读全文 »

【Easy Python】第五话:小试scikit-learn数据挖掘——newsgroup数据处理与文本分类

发表于 2019-04-14 | 更新于 2024-04-07 | 分类于 Easy Python

前言

数据挖掘(Data Mining),一般指从海量抓取的数据中经过一定的数据处理、算法,从而提取出有价值的信息的过程。它大体基于统计学、机器学习(Machine Learning)等原理,辅佐了人类的信息处理工作,为人工智能(AI)铺下道路。

幸运的是,似乎正是因数据挖掘而生的那样,Python社区中有各种数据挖掘相关的package,能够满足各种数据处理与算法模型构建需求。我们只需要pip/conda install 包名,然后查查api文档,熬几十行代码,就能玩一玩数据挖掘。

为此,在这一话,我们以自然语言处理(NLP)的文本分类(Text Classification)为例,设计一个最simple的,最old school的,以Python为例的,从数据获取到产生数据挖掘结果的流程。

文本分类是什么?

阅读全文 »

【Lua杂谈】debug.getinfo源码分析——使用C API重写lfunctimer

发表于 2019-04-07 | 更新于 2024-04-07 | 分类于 Lua杂谈

前言

昨天更新了一下lfunctimer,主要把hook更改为c api的形式,并且初步加了util和config的扩展

想要试用的同学的话可以点击上面clone下来,或者安装luarocks后执行下面命令安装~

luarocks install --server=http://luarocks.org/manifests/utmhikari lfunctimer

言归正传,利用lua原生的c api做debug相关操作会比lua自带的debug.getinfo来的快许多,我们可以来一探究竟

debug.getinfo源码分析

我们可以从官方下载源码搜索debug.getinfo的实现,此处以版本5.3.5为例。

debug.getinfo对应的源码是ldblib.c的db_getinfo函数,我们可以简单在ldblib.c的末尾中查到~

阅读全文 »

【Easy Python】第四话:爬虫初探——玩转豆瓣二百五(下)

发表于 2019-03-31 | 更新于 2024-04-07 | 分类于 Easy Python

前言

在上篇,我们获得了豆瓣二百五的电影URL,然后存储在了一个文件里。接下来,我们要访问每一个电影URL,深入敌后,获取情报~

所有的代码都已存储在我的Github仓库:Douban_250当中~

设置爬取规则

对于每一个电影,我们选择爬取如下内容(虽然电影列表页就能爬得到= =):

1
2
标题(title)、年份(year)、时长(time)、
导演(director)、类型(genre)、评分(score)

随意点击一个电影页面,用上篇所说的提取CSS选择器的方法,我们可以制作出每一种内容与内容提取规则的映射。如下所示:

阅读全文 »

【Easy Python】第三话:爬虫初探——玩转豆瓣二百五(上)

发表于 2019-03-31 | 更新于 2024-04-07 | 分类于 Easy Python

前言

一直以来,爬虫都是许多同学学Python的目的之一,就连我敬爱的领导,也经常不耻下问一些爬虫方面的问题。因此,我们开始实战——以豆瓣Top 250为例,试水一下基础的爬虫。

“玩转豆瓣二百五”系列分为上下两部,所有代码,可以在我的Github里Douban_250找到~

工欲善其事,必先利其器。以下浏览器操作,都基于最新版Chrome~

获取电影列表网页数据

爬虫爬虫,实质还是抓取网络数据= =爬虫不得急,可要一步步来——首先,我们希望获得每一个电影的链接,把它们存起来,留着后续爬取具体内容备用。

打开豆瓣Top 250首页,会看到电影列表的页面,往下翻,会看到总共有10页,每页25个电影。打开第二页,可以看到浏览器的地址变成了https://movie.douban.com/top250?start=25&filter=,咱们观察一下链接——链接有一部分,start=25,是不是很突兀?按这样推算,第三页应该是start=50,第一页就是start=0嘛= =试了一下,果真是的= =

因此,爬取250个电影链接,不难规划。具体如下:

阅读全文 »

【Lua杂谈】Lua性能测试:函数执行时间统计

发表于 2019-03-25 | 更新于 2024-04-07 | 分类于 Lua杂谈

前言

在白盒性能测试(profiling)中,函数时间统计是一项重要的指标。对于整个以lua为基础的系统架构而言,函数时间统计数据是性能优化的直接参照。

因此,本次Lua杂谈,将会分享一种函数执行时间统计的实现~

函数执行时间获取

单个函数执行时间的获取相对较为简单,例子如下:

1
2
3
4
5
6
local function test()
local start = os.clock()
...
local end = os.clock()
print(tostring(end - start))
end

在函数的开头与结尾调用lua内置的os.clock(内核实现为time.h的中clock()时间戳除以CLOCKS_PER_SEC统计量,单位为秒),可以轻而易举地获得该函数的执行时间

hook实现

阅读全文 »
1…192021
ひかり.HDQ

ひかり.HDQ

talk is cheap, code is rich
203 日志
14 分类
423 标签
GitHub Mail CSDN Juejin Steam Bilibili
© 2019 – 2025 ひかり.HDQ
|