1. 2005-05-31开篇

学习PYTHON 入门日志 (一)

关于我:
我是电子工程毕业的,搞过DSP,现在是c++ 的程序员,会调电路,会写算法,会玩烙铁,
会很多东西,但是都不熟练,就是所谓的样样通,
样样松的状态,痛苦过一阵子,仔细想来这也是我的优点,我想我以后能对软硬件,
以及操作系统都能有所了解,能做一下完整的项目的设计。
另外我的理想是,勤劳致富,环游世界!
引子:
被几个编程高手告知,Python这个东西很好,而且公司有一下东西是是在wxPython下做的。
就萌生了学习它的念头,这后面就是那个牛人,也是我的榜样给我的学习语言的建议:
I suggest you just learn python first and forget the other 2 for a while. One reason is that python is a totally different language, it can expand your understanding about object-oriented programming and it is strict, clearly defined too.  The other reason is that we also use a lot Python in the company so maybe you can have some real use of it some day. I don't need to pay much attention to perl, especially its OO part. It is not well-designed. As you said, Java is very like C++, after you learn C++ well, you can just pick Java up in several days when you need to use it.
为此我要努力学习!
开始:
在学习前,浏览了很多相关的网站,下载了不少的资源,很快的速度看了一遍
《Programming Python    2nd》,有了个感性的认识。发现了自己最大的缺点就是
缺少练习,现在在看《Python 学习笔记》王纯业的,希望再加深一下感性认识同时
照例子动手写一下。我会记录下来我认为有趣的东西,希望大家多交流指正。
焕然一新的感觉:
1:python 好像很牛,解释型面向对象灵活又强制类型的  语言!
2:第一个练习
Python 2.3.4 (#53, May 25 2004, 21:17:02) [MSC v.1200 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print "I am here"
I am here
>>> print "^哈哈_^"
^哈哈_^
3:"一切皆为对象,对象都有名字"--我还没有感觉呢,姑且记住大牛的总结!
4:基本数据类型和c/c++都很象,但注意"1==1.0" 是真值,这个对我很难理解,
我以前用汇编的,总是想1 是int型和1.0是float,编码方式都不一样,做"=="
其实是在做一个求反的异或,总也不可能返回真的,我猜测,Python是把 int
型默认转换成float了,仅仅是猜测,以后验证吧,
5:None是特殊的变量,表示出错,我以前还认为是不是和c中的NULL一样,
其实不一样的,NULL一般都是宏定义为0的,而None是个有意义的。
6:bool型 很多可以为false 如 0,0.0 ,[],{},None 等,感觉不错,世界应该就是
是和非应在该相互平横些。
7:在学习逻辑表达式的时候,出现麻烦,我照着例子做但是报错,请教各位兄弟
>>> def getTure():
... return 1
  File "<stdin>", line 2
    return 1
         ^
IndentationError: expected an indented block
>>>
这是什么原因呀?

[python 没有括号,用的是缩进,你只要在 return前按一下TAB键就可以了 :) ]

8:注意逻辑关系式的屏蔽(就是有时候可能不运行逻辑关系式内的可执行的东西,
这个在c中也很常见)还要注意c中常用的
 cond ? true_expr: false_expr 最好不要用(详见effective c++),python有类似的
东西,所以要好好考虑清楚正确的用法,<cond> or <expr_false> and <expr_true>
也要小心。


以上是python的基本类型,下一篇将是 list和string等
邹胖小 2005年5月31日 祝大家快乐安康

1.1. list列表

学习PYTHON 入门日志 (二)

谢谢各位兄弟的支持,指出了我很多的错误,我会努力改正,然后出一个修正的东西。 
感触:
python 的缩进很重要的,上一篇就是因为例子没有缩进就报错的。以前就知道FORTRAN
会有的地方要求缩进。以后能回头看看python的缩进能有什么样的好处,现在感觉就是
省掉了{}。
继续:

9:list列表,叫什么都无所谓,数组,Vector都行
    a=[1,"abc",2.87,"xxx"],就是它,很多类型的数据可以排在一起,
    当然中规中矩 的 也可以
    a=[1,2,3,4,667,471,288]  ,
    也可以是
    >>> leaf1=[0,1]
    >>> leaf2=[2,3]
    >>> leaf3=[4,5]
    >>> leaf4=[6,7]
    >>> branch1=[leaf1,leaf2]         这是list的list
    >>> branch2=[leaf3,leaf4]
    >>> root=[branch1,branch2]
   如果用的好就能 代替很多东西,象可以构造     树,堆栈,队列,

10:list中特别的地方,可以有负数的索引,

      -len  第一个元素
      -len+1 第二个
      ...
      -1    最后一个元素
      0   第一个元素
      1   第二个
      ...
      len -1 最后一个元素

      这样做我想 可能用到 循环队列中会比较有用吧,
      如果我想得到倒数第n 个数据可以之间 a[-n] 就可以了方便多了
      具体有什么深入的用法
      希望大牛们给个解释。

11:list的常用的操作
       list的截取
               a[3:5] ,
               a[4:],
               a[:6],
               a[:]
               a[1:-1]  从a[1]  到a[len-1](最后面的元素)
               很象matlab里面的数组的用法,还有就是 ":"左侧的元素的位置一定不能比右侧的大。
               如  a[-1:1]  返回的就是[]  空的,a[4:3]也是如此。
       list最后面追加
               a.append(var)
       计算list中某个元素的出现次数
               a.count(var)
       list长度
               len(var)
       list最后追加list
               a.extend(list)
       list中返回某值的位置
               a.index(var)
       list中插入某值
               a.insert(index,var)
                还可以插入一个list 如:
        >>> b=["s","d"]
        >>> a.insert(2,b)
        >>> a
        [1, 2, ['s', 'd'], 3, 4, 5, 6, 7]
        >>>
                       ps:学习Python总是能给我带来惊喜!
       list弹出最后的值/或某个位置的值
               a.pop()
        a.pop(3)
      list中找到某值,并删除
       a.remove(var)      注意一次只能删除一个,并且是最前面的。如果有多个var,要删除多次
      list中倒次序
       a.reverse()
      list中排序
       a.sort()
       a.sort(func) ,用函数func(x,y)来做为规则排序
12:又一个很让我惊异的东西
      [ <expr1> for k in L if <expr2> ]
      是下面式子的代表

      returnList=[]
      for k in L:
      if <expr2>: returnList.append(<expr1>)
      return returnList;

      看上去很简洁方便,注意是建立了一个新的,空的list然后往里面添加!
      我喜欢这个表达式子
      例子有:
      >>> [ k.upper() for k in a if k.isalpha() ]    将list  a 中的字母的东西都变成大写
      >>> [ k.lower() for k in a if k.isupper() ]  将a 中大写都变成小写 ,
       注意生成的新的list 不是原来的list
       [ k + 1 for k in a if type(k)==types.IntType ]  将a中的int都加1

以上是python的list,下一篇将是string等

邹胖小 2005年5月31日 祝大家快乐安康 ,六一儿童节快乐!

1.2. 问题解答