posts - 256, comments - 1319, trackbacks - 41, articles - 8
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

感受Python的美妙

Posted on 2005-04-02 01:47 FantasySoft 阅读(2106) 评论(10)  编辑 收藏 所属分类: All About SoftElegant Python

        最近上班的时候忙里偷闲,仔细研读了DiveIntoPython中关于Python特殊数据类型的章节。而我再一次被Python的简约之美深深打动了。
         List是Python的三种特有数据类型中的一种,跟数组很像,支持直接利用下标的访问方式;同时List的size是可变,这一点又跟ArrayList是十分类似的。但是List就像是包罗万象的万花筒,不仅能够容下对象,同时也能存放基本的数据类型,如整型等。这比Java的ArrayList的装载能力强多了,在Java中ArrayList是不能存放基本类型的。List除了极强的兼收并包能力,对List中的item进行操作的灵活性更是让人为之振奋。举个最简单的例子吧,如果一个数组中存放着一个整数数列,现在想将数组中大于某个数值的数选出来构成一个新的数列。在Java中,恐怕就得这么做了,先构造一个类,然后在类中建立一个方法:

public static int[] select(int[] source, int bound) {
    
int[] result = new int
[source.length];
    
int j = 0
;
    
for (int i = 0; i < source.length; i++
{
        
if (source[i] > bound) 
{
           result[j] 
=
 source[i];
           j
++
;
        }

    }

    
return source;
}

        看着这样的代码,您是不是会觉得很不爽呢?本来很简单的一件事情,怎么需要那么多的代码,而且还得为返回的数组作初始化的时候,准备多一些空间,如果实参不是一个int数组,而是double型的呢?恐怕我得再写多一个方法了。那么在Python中,又怎么做呢? 很简单,真的很简单:
        
[item for item in source if item > bound ] (注:source是一个List)
您是不是很惊讶呢?OK,calm down,就是这么简单。不管source装着是int,还是double,甚至是string,这行简单的代码都能替你把问题搞定。因为Python对这样的task处理游刃有余,我们根本都不需要将其封装到一个module中了。
        除了这三种特有数据类型让我爱不释手之外,Python处理String的能力,也让我为之赞叹。如果您想将一个String重复打印几次,你的Java代码是不是要这样写呢:

for (int i = 0; i < times; i++)
    System.
out.print("Hello "
);

        在Python中,你只需要这样:print "Hello " * 5。 噢,'*' 运算符都用到String身上了,代码也因此变得简单而易懂。Python中字符串类型有一个功能很强大的函数,就是join()。join函数可以接收具有顺序化的变量,如Dictionary、List、Tuple和String。例示如下:

>>>"+".join("123")
'
1+2+3'
         

>>> ";".join(["first""second""third"
])
'first;second;third'


        Python的简约让我深深的陶醉了,她中和了代码的枯燥。让人心烦的代码因她的存在而变得美妙。您感受到了吗?

Feedback

#1楼    回复  引用    

2005-04-02 10:00 by 泡茶 [未注册用户]
最近我也在玩python,感觉不错

#2楼    回复  引用  查看    

2005-04-02 12:10 by Lester Yu      
觉得和 Functional Programming 很像。。。

#3楼    回复  引用    

2005-04-02 16:39 by 泡茶 [未注册用户]
@LESTER YU
贴主的文章中还不太能体现出来,不过Python确实可以进行Functional Programming

#4楼    回复  引用    

2005-04-03 20:05 by 贺星河 [未注册用户]
呵呵,还有动态变量存储呢,一个变量初始化之后,使用的过程中还可以变成其他类型的,这才是和C#、Java最不同的地方

#5楼    回复  引用    

2005-04-04 10:11 by fking [未注册用户]
对。应多说些特色的东西。像前面的ArrayList,在C#里一样可以什么都装。后面的字符串的东西倒是有些意思,应该着重这些

#6楼    回复  引用    

2005-04-05 10:13 by 小贝 [未注册用户]
后面的join功能,C#也有的。
String.Join(String sep,Array arr)

#7楼    回复  引用    

2005-04-08 16:52 by Ninputer [未注册用户]
第一个功能C#也有
List<int> result = source.Find(delegate(int obj){return obj > bound;});

#8楼    回复  引用    

2005-06-15 11:16 by eric [未注册用户]
看了你的很多篇文章,觉得写得很好,很流畅。
这篇文章中你谈了Python的简约,我觉得和Perl很象啊

#9楼    回复  引用    

2005-08-11 09:20 by albertlee [未注册用户]
Python 的队伍又壮大了

#10楼    回复  引用    

2005-10-19 10:01 by iceyu [未注册用户]
楼主的那个代码折叠是怎么搞出来的,
呵呵。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-06-19 00:56 编辑过
 
另存  打印