特性 | 描述 |
缩排 | Python格式中最有特色的东西,有了它风格统一,而且减少了不必要的块包围符号 如果可以混用空格和制表符就更方便了. |
多种序列 | 有列表,序组(tuple),和字典(字符串可以看做序组) 内置常用的数据结构容器,确实更方便,其实Python语法一点都不简单. |
序列乘法 | 序列可以进行乘法,表示多个序列的组合。如:s=[1];s*3为[1,1,1] C#的Linq对"序列"操作也很方便,而且有一致的语义。 |
序列分片 | 序列可以通过分片进行切割,而且还可以进行序列的复制:s[:] |
序列的负索引 | 序列的索引可以为负数,表示后最后向前数。如:s=[1,2,3];s[-1]表示3 |
动态语义 | 这个特性大部分脚本语言都有,就是通过赋值来决定变量的类型。而且通过赋值可以改变变量的类型。 虽然C#的var变量也可以通过赋值来决定变量类型,显然动态语言这方面支持更灵活。 |
连续比较 | 可以如下进行比较:2< x< y<3 Python语法很复杂。 |
超长整数 | 在整数后面加上'l'或'L'可以使用很大的整数,比C语言的整数还大。如a=999999999999999999999L 这不是长整型么? |
同时赋值 | 在Python中,可以一次给多个变量赋值,如:a,b=1,2 当我发现这样做可以让一个函数有多个返回值时,令我兴奋不已。 |
循环中的else | 在Python的循环语句中,可以有else字句,表示没有使用break语句退出循环,即循环正常结束时,要执行的语句。在for,while中均有。 没有类似的可比较语法,不知道会在实际编程中提供多大方便。 |
异常中的else | 异常中也可有else子句,表示未出现异常时执行的语句。与finally不一样,finally是必需要执行的,而else则是有条件执行的 |
格式输出中的关键字 | 在Python的格式输出格式中,格式符可以用关键字参数。如:"%(table)s" % 怪异的%用法。 |
模块、包 | Python中可以有模块,还可以有包。可以象Java一样导入。 |
语句动态生成 | 可以写一个字符串,然后运行它。如:exec "x=2"。还可以执行一个文件(动态生成)execfile()。表达式使用:eval()。 动态语言表现令人震撼。 |
属性的动态变化 | 可以使用getattr()得到一个对象的属性,可以使用setattr()来修改过设置对象的新属性,使用delattr()删除对象的属性。有时还可以:a.newattr=attr来设置新属性 这是每个静态类型语言程序员的梦想! |
真正的面象对象 | 可以多态继承(有多个基类),可以有私有属性,类公共属性 但我还是不喜欢双下划线。 |
基类的动态改变 | 如果愿意你可以增加新的基类,从而使一个类拥有新的基类方法,而不用修改原来的基类 |
缺省参数值 | Python的函数可以使用缺省参数 C#取消这个机制,用函数重载来实现,力求精简。 |
关键字参数 | 还支持关键字参数,如a(name='abc') 这是个不错的想法,C++怎么不这么干?C#4.0会支持的。 |
函数的不定参数 | Python的函数支持不定参数。可以使用关键字参数,也可以不使用。 C#的parm关键字,Java 1.5也有类似的支持。 |
特殊的类方法 | 类可以定义特殊的方法,支持逻辑操作,如'+','*',[ i ]等 C++ C#也支持操作符重载,Java认为这太过复杂。 |
单行函数 | Python支持单行函数:lambda x:x+1 C#3.0对Lambda表达式的支持更强大。 |
列表映射 | 对列表可以进行映射操作,如["%d" % x for x in range(10)] listtwo = [2*i for i in listone if i > 2] 等同于C#的Linq语法: var listtwo=from i in listone where i > 2 select 2*i; |
嵌套函数 | 可以象pascal一样写嵌套的函数,到了2.1以上变量的作用域也可以嵌套 有时候也会怀念Pascal的这个功能。块作用域变量类似于del 变量 语法。 |
对象的持续性 | 一个对象可以保存起来,在需要时恢复。 支持反射的面向对象语言都支持序列化。 |
可编译成字节码 | 象Java一样,可以将Python程序编译成字节码。 |
__init__ |
貌似不用new实例化对象的语言都不用类名作为构造函数名,这样修改类名更方便。 双下划线和self形参还是令人比较讨厌。 |
** | 乘方运算符,太有才了! |
文档字符串 | C#和Java也有类似的注释,Python提升到了对象属性的概念。 |
解释型 | C#的即时窗口也很好用。 |
多线程 | 还没有学习到Python的支持方式。 |
泛型 | Python支持鸭子类型,没有强类型检查,所以不需要泛型。 |