Python可以减少代码量?我不信

345 阅读2分钟

突然看到好几篇文章,内容基本上是什么用Java需要100行,用PHP只需要30行,用Python只需要10行(数字记不清了)。简单说一下我的看法。

我不服,凭啥都是编程语言,你行我就不行?

我记不清当时给出的支持Python可以少写代码的栗子具体是什么了,它给出的是实现了某个功能,两行搞定,一行引入,一行调用。

当时看的我一脸懵逼,哇,真的耶。只用一行就可以。但稍后一想,这也太扯了吧。你看着貌似是只调用了一行代码,但里边具体的实现不还是有的么?代码量并没有减少,只不过是搬到了你看不到的地方,假象罢了。

当然,我是支持用Python可以少写代码的,但并不是刚才说的那样。

在我看来,这个问题得从语法层面来说,只有语法支持,才算真的能够减少代码量。其实各个语言都有其特定的语法。就像PHP中变量直接当函数用,直接当类用,连反射都不用了。

举个栗子就是大家都熟悉的lambda。现在有一个需求,要接收外部穿进来的函数。给出不同语言的实现

Java版本

// 因为Java中一切都是对象,所以尽管提供了lambda的支持,但并不能直接调用函数,而是以接口的形式调用
interface MathTest {
    int add(int a, int b);
}
// 接收lambda的函数
void dispose(MathTest mt){
    int v = mt.add(1, 3);
}
// 调用函数的地方
dispose((x, y) -> x + y)

因为Java一切皆是对象,lambda其实就是一个匿名内部类。

PHP版本

// 接收函数
function dispose($fun){
    $v = $fun(1, 3);
}
// 调用的地方
dispose(function($a, $b){
    return $a + $b;
});

PHP可以直接传函数,已经很方便的,但是不支持lambda,还是需要正儿八经的写个函数传过去。

Python版本

def dispose(fun):
    v = fun(1, 3)
dispose(lambda x, y: x+y)
Python既可以直接传函数,又支持lambda表达式。

当然,还有一些其他的语法,是可以稍稍体现一哈Python的独到之处的。嘿嘿

简单罗列了一些Python的语法支持,确实是不用写过多代码就能实现相关功能。

元素交换

a,b = b,a

实现两个元素值的交换,无需临时变量。

数组生成

list = [x for x in range(20) if x%2 == 0]

生成偶数列表,这个一行搞定,舒服。

列表切片

list[1:4]

对列表的各种切片操作。


其实,Python最大的特点就是,他没有大括号。刚开始从Java到Python时,看着没有大括号的程序,很顺眼。但现在用了一段时间的PHP,又突然感觉没有大括号有点别扭。哼,男人。