##language:zh <> = 2005-05-31开篇 = [[PyCNmail:2005-May/010915.html|学习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 "", line 2 return 1 ^ IndentationError: expected an indented block >>> 这是什么原因呀? [python 没有括号,用的是缩进,你只要在 return前按一下TAB键就可以了 :) ] 8:注意逻辑关系式的屏蔽(就是有时候可能不运行逻辑关系式内的可执行的东西, 这个在c中也很常见)还要注意c中常用的 cond ? true_expr: false_expr 最好不要用(详见effective c++),python有类似的 东西,所以要好好考虑清楚正确的用法, or and 也要小心。 以上是python的基本类型,下一篇将是 list和string等 邹胖小 2005年5月31日 祝大家快乐安康 }}} == list列表 == [[PyCNmail:2005-May/010932.html|学习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:又一个很让我惊异的东西 [ for k in L if ] 是下面式子的代表 returnList=[] for k in L: if : returnList.append() 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日 祝大家快乐安康 ,六一儿童节快乐! }}} == 问题解答 ==