2008-11
03

Ver 2: 2008/11/7
Ver 1: 2008/11/3

基本概念

  • Python居然支持复数。如(-5+4j)。但要注意虚数单位单独使用时要写成 1j,不能写成 j。
  • 与Perl和PHP的区别:单引号和双引号没有任何区别。没有插值功能。
  • 三引号:''' 和 """ 相当于Perl的heredoc。
  • 行尾不需要用分号,分号仅用于一行写多条语句的情况。跟BASIC的冒号有些相似。
  • 缩进是有语义的!建议使用TAB缩进
  • 逻辑运算符只有 and or not,没有 && || !
  • 没有自增自减运算符,--a 相当于 -(-a),a--语法错
  • 赋值语句不是表达式,如 y = (x = 1) 语法错
  • 字符串切片是很好用的: 'Hello'[0] == 'H',以前只有Basic才有这个功能,其他语言都没有。当然Python比Basic要强大得多
  • cmp函数相当于Perl的 <=> 和 cmp,由于python有类型,所以无需像perl那样用两个运算符
  • []、()、{} 的布尔值是False,跟JavaScript不同(JavaScript中空数组和空对象都是true)。与Perl类似,但Perl可以用环境来解释。

运算符与表达式

  • 运算符 ** 乘幂,Perl也有。
  • 字符串的 * 表示重复,相当于Perl的 x 运算符。
  • 居然还有专用于整除的 // 。别跟Perl 6的 // 混淆了。

控制流

  • if-elif-else,Perl为if-elsif-else,bash为if-elif-fi
  • if、elif等控制流语句后面要加冒号,很像PHP的语法
  • while和for循环可以带else,循环正常结束时就会执行else。不用像C语言那样,循环结束时要检查循环变量是否等于终值,以判断是否正常结束。赞
  • range函数生成的结果不包括终点。比较:Perl的 .. 运算符包括终点。所以,Python的range(a,b)理解成C语言的 for(i=a;i<b,i++) 好些。
  • 什么都不做的pass语句,算是个python特色
  • enumerate能同时迭代key和value,很不错。for key, value in enumerate(LIST):

函数

  • 函数中使用全局变量需要用global关键字,类似于PHP
  • DocString,又一个python特色,函数的第一个逻辑航的字符串作为文档字符串。类似于POD和javadoc,不过是写在函数体内的。还能通过"函数名.__doc__"访问
  • lambda:类似于perl的闭包
  • int()函数在字符串转整数时,不能用来转浮点数字符串,也不能转包含字母的字符串。如int("1.2")、int("123abc")都是语法错误,而并不返回 1、123。

数据结构

  • 列表:定义方式为 a=[1,2]。等价于perl的数组/列表
  • 元组(tuple):定义方式为 a=(1,2)。
  • 要注意列表中的列表不会被打散,如 a=[1,2], b=[a,3,4],结果就是 b=[[1,2],3,4]。这一点与Perl不同。
  • 字典:定义方式为 c={'a':1, 'b':2}。等价于perl的散列。注意两点:
    • 定义和访问时,key必须用引号引起来。
    • 使用{}定义,使用[]访问,即c['a']。与Perl不同。
  • 列表赋值是引用赋值。要想拷贝,必须用切片:b = a[:]。Perl程序员要注意。
  • 列表的sort会改变原列表。

例外

  • try-except-finally,相当于java的try-catch-finally
  • 还有else,当没有发生异常、正常结束try块时执行。跟for/while的else块一样
  • 故意抛出异常叫raise,java里面叫throw

面向对象

  • 数字和字符串(对象)是不可变的。那么如何理解a=a+1?实际上是a+1创建了一个新对象赋给a,而a原来的对象被回收了。学习Python必须改变原来的“变量是个盒子”的看法
  • (-1, 100)之间的整数会被缓存,就是说即使写成 a=10; b=10; ,a和b还是同一个对象(a is b == True)
  • python的长整型是无限大的
  • 类的__init__函数类似于C++的构造函数;__del__函数类似于C++的析构函数。
  • 类方法定义的第一个参数必须为self,调用时这个参数会被传递为对象本身。类似于perl,perl中第一个参数也会被传递为对象本身,不过需要程序员自己写 my $self = shift; 来接收。
  • 用C++的话来说,所有成员函数都是虚函数。
  • 调用基类方法时要手工传递self,如 Parnet.__init__(self, name)。

模块

  • import foo; 相当于perl的 use foo;
  • from foo import bar 相当于perl的 use foo qw/bar/;

2006-08
31

本文介绍了在Windows下安装Apache、PHP、mod_perl、mod_python、subversion的方法。
阅读全文 »


2006-04
07

发文日期:2006/4/7

在Windows环境下,由于这三个软件的编译环境不同,造成结合上的一些版本限制。使用的编译器有两种:MSVC和VC.NET。

Apache: 最新版本为 2.2.0(VC.NET),前一版本为2.0.55(MSVC)。

Python: 2.3系列的最新版本为2.3.5(MSVC);2.4系列的最新版本为2.4.2(VC.NET)。

subversion:最新版本为1.3.1(MSVC)。由于编译环境不同,该版本所附带的 mod_dav_svn.so 不支持Apache 2.2.0,仅支持 2.0.55;subversion的python binding也是不支持Python 2.4系列,仅支持Python 2.3系列。

因此,如果你仅仅是要绑定 Apache 和 Python,那么 Apache 2.0.x + Python 2.3.x 的组合或者是 Apache 2.2.x + Python 2.4.x 的组合都可以;但是如果还要绑定subversion,那么就只能选择 Apache 2.0.x + Python 2.3.x + subversion 1.3.1了。

估计subversion在近期内会推出使用 VC.NET 编译的版本。