阅读全文在ctf中也有众多需要处理图片的题目,有时候手动批量处理比较繁琐,有时候人工识别根本不现实。这时候又要进行编程了,而这里用到的库就是PIL(Python Imaging Library)
最近正在研究python3与python2的特性区别,也搜了一些资料,不过好像大家都没有提到python3中函数式编程部分与python2的区别。正好官方文档里面有个howto就说了这一节,稍微看了看,总结了一下python3中FP的特点。(其实就是翻译嘛:))
阅读全文守护(Daemon)进程是linux中的一种重要的系统管理手段,一般名称都以d结尾,运行在系统的后台,完成一些监控或者服务的工作。在Python中也是可以实现这样的功能,不过现在好像也有外部库支持了,其实也不难。
阅读全文signal是进程间通信与异步处理的一种手段,当遇到并发性编程或者系统级的控制时,就需要我们能够控制程序的信号处理进程,完成一些额外的工作。
稍微看了一下signal模块的官方文档,从使用上来说还是相当简单的。
阅读全文Python的数据持久化方式有很多种,比较好用又相对轻量级的就属JSON与Pickle这2种了。其实两者的使用方式非常相近,这里记录下来备忘。
JSON
python中处理JSON的库就是json模块,需要用到的方法大致就是以下4个,其实它们的参数有很多这里暂且省略。
1 | import json |
上一篇文章介绍了线程内的并发——协程,但有的时候协程也不能解决所有的问题,因为Python自己启用了GIL(全局解释锁,具体是什么还没研究),所以不能发挥多核处理器的优势。所以我想到在进程级别再并发一次好了。
multiprocessing这个库提供了对于多进程的支持,主要就是使用其中的Pool进程池技术。
阅读全文之前一直没有仔细研究过python的并发方案,实习的时候终于有了这样的需求。
Gevent是Python中coroutine协程的一种实现,基于Greenlet。之前我只是听说过其在性能优化上简单而有效,正好最近有并发需要,所以就稍微用了一下。
确实是非常简单,其中的monkey库可以直接patch系统的多进程、多线程还有socket的实现,具体的调用方法就是monkey.patch_xxx(),xxx可以是socket,ssl,os,subprocess,thread等。还可以直接调用monkey.patch_all()执行所有的patch。
gevent的好处在于可以自动切换协程,一般来说I/O操作比较耗时,那么当一个协程在等待I/O时,它会自动切换到其他协程工作,这样就能够充分利用CPU了。
阅读全文AsisCTF 2015 - Simple Algorithm
Score: 100
根据下面的加密算法和给出的密文解出flag
1 | #!/usr/bin/python |
Numpy中最常用的是ndarray数组,而因为其是多维的有时候需要在不同维度上进行切片。
其实它的切片方式与Matlab类似,熟练以后就很好掌握了。
基本原理是这样,首先切片需要使用序列生成即冒号运算符:
一个单冒号为选取整个序列,也可以指定范围,如1:5表示1~4(包括)这4个元素。同时可以指定步长如1:6:2表示选取1,3,5这3个元素,这个与Python的列表切片是一致的。
然后,使用逗号,来区分轴(axis),轴可以简单地理解为在某个维度上的投影。例如axis=0指的就是行,axis=1指的就是列。那么第一个选取就是行,第二个选取的就是列,中间用逗号隔开,例如下面的一条语句。
1 | arr[:,2] |