Liuw's Thinkpad

想要赢就先学会输,想要成功就先学会失败

Archive for the ‘python’ tag

Python写的排列组合函数

with one comment

昨天做东西的时候用到这个了。转过来的,觉得不错先记下了。

def comb(items, n=None):
    if n is None:
        n = len(items)
    for i in range(len(items)):
        v = items[i:i+1]
        if n == 1:
            yield v
        else:
            rest = items[i+1:]
            for c in comb(rest, n-1):
                yield v + c

def perm(items, n=None):
    if n is None:
        n = len(items)
    for i in range(len(items)):
        v = items[i:i+1]
        if n == 1:
            yield v
        else:
            rest = items[:i] + items[i+1:]
            for p in perm(rest, n-1):
                yield v + p

yield这个关键字,可以看一下limodou的一[Python 学习]2.5版yield之学习心得

Written by liuw

August 14th, 2009 at 8:55 am

Why Perl, not Python

with one comment

此post并不是想引起语言之争,只是自己的一个针对特定情况的小发现而已。

在信息安全领域,Perl和Python一直是安全工作人员的好帮手,开发快速,简单,无须编译直接运行……这些优点,使它们成为写injector/sender的不二选择。

一般来说,做exploit的初期,通常会需要发送大量的数据,一般来说比较常见的是这样的Perl语句:

$ perl -e 'print "A" x 10240'

我原来也一直在用这样的语句,但是今天想想,为什么一定要用Perl啊,Python其实也有一样的功能嘛:

$ python -c 'print "A" * 10240'

小测试了一下,原来用Perl还是有原因的——速度。Perl的速度还真不是盖的。当然,Perl出现得比较早,hacker们形成了传统也说不定。

$ time perl -e 'print "a" x 10240' > /dev/null

real    0m0.008s
user    0m0.000s
sys     0m0.008s
$ time python -c 'print "a" * 10240' > /dev/null

real    0m0.024s
user    0m0.001s
sys     0m0.023s

再写一个C程序,做同样的事情。

char buf[10240];
int i;
int main()
{
  for (i = 0; i < 10240; i++)
    buf[i] = 'a';
  write(1, buf, 10240);

  return 0;
}

C程序测试结果如下:

$ time ./test > /dev/null

real    0m0.005s
user    0m0.000s
sys     0m0.003s

果然还是C语言的最快,不过,Perl和Python在开发上的便捷性弥补了它们在速度上的小劣势。

再回到Perl和Python的比较上来,在做这一件事上,Perl比Python要快,这是没得说的了,数据说话。因此,在快速测试时,估计我以后也是用Perl来直接输出字符串了。不过在写正式的exploit时,Python比Perl更整洁点,我还是会选择Python的。

Written by liuw

July 28th, 2009 at 4:13 pm

Python 3.0 released!

without comments

既然是 3.0,自然和 2.x 是有区别的。看了一下 What’s New,觉得变化挺大的,一些函数的行为发生了变化,还有一些函数的实现不同了。看来 Python 的书又得翻新了。

变化比较大的是 print 从 statement 变成了 function,然后就是 unicode 和 8-bit 字符,这两个印像比较深点。其他的什么东西,到真正用上再慢慢了解了。

另,刚刚用 Django-0.96 配上 MySQL 做了一个很丑的程序,呵呵,交差用的。

Written by liuw

December 4th, 2008 at 11:42 pm

Posted in Programming,Tech

Tagged with

读 Dive Into Python 的一点小感受

without comments

这两天累过之后,想找点轻松的东西来看一下,于是想到了 Python。一口气把 Dive Into Python 看了四章,虽然看的大都是以前都知道的东西了,但是还是有另外的收获。

我平时多用 C 和 ASM,但是也自认为对于“面向对象”这个概念算是理解得比较透了,但是今天看了那本书才知道自己的理解还是比较肤浅的。在 Python 里面,万物皆对象这个说法确实不假。有的例子一下看下去,楞是没得回过神来。“对象”这个概念真是还没有深入我的心中,呵呵。

这样子看下去,自己却又多少觉得不习惯。在习惯了 C 和 Java 这些强类型定义的语言之后,Python 里面灵活的处理方式让我多少有点不适应,感觉过于灵活而难以掌控。

Written by liuw

May 5th, 2008 at 8:33 pm

Posted in Programming

Tagged with , ,