首先,Python与JAVA一样,是一门开源的、跨多平台的语言。而C#本身不是开源的,且只能运行在Windows平台上。
1. 编译性
Python是一门解释性脚本语言,源代码不需要编译可以直接运行,运行时Python字节码解释器解释源代码并执行相关命令。Python的源代码文件.py可以直接运行,如果装了Python在本地的话。而C#则需要编译为IL,运行时由CLR托管运行。
2. 数据类型
Python的数据类型比较少,基本数字类型只有5种,序列类型三种:字符串,元组,列表。映射类型一种:字典。C#的内置数据类型则有很多。Python没有double类型。Python没有char或byte类型来保存单一字符或8位整型。 Python有个内置的复数数字类型,C#没有。
3. 面向对象
Python中代码(字段,函数)可以不放在类中,而是直接放在.py文件下,C#不允许这么做。
4. 代码块
Python缩进,C#是大括号。
5. Switch
Python没有
6. for/foreach
Python没有foreach,Python的for循环类似于C#的foreach。要实现C#的for循环功能,Python要借助于range()函数。
Python的for/while循环语句包含一个else子句,其只在循环完成后执行,也就是说break语句也会跳过else块。C#中for/foreach/while循环没有else子句。
7. 列表解析/切片操作/生成器表达式
C#没有这个功能。Python的索引的最后一个字符的索引是-1,C#没类似相关功能。
8. 自增/自减运算
Python不支持
9. 变量声明
Python无需显式的声明变量,在赋值时自动声明。Python也不需要变量类型声明,因为是动态类型,解释器判断类型。C#需要先声明,并指定类型,再赋值。
10. 内建函数
Python的有些内建函数,可以无需通过类而直接调用。同样Python除了有全局名称空间,局部名称空间外,还有个内建名称空间。
11. 字符串
Python的字符串符号有3种: ' " ''', 比较灵活, C#只有“。
12. 错误和异常
Python中try语句中有个else子句,C#没有。
13. 函数
Python的函数返回值相当灵活,可以根据判断条件返回不一样的数据类型,也可以以返回一个元组的形式返回多个数据类型。Python的函数没有定义返回值类型。
Python的函数可以作为参数传入函数,而C#实现类似的功能需要借委托来实现。
你可以在任何时候给Python的函数添加属性。
14. 内嵌函数
Python的函数体内仍然可以定义一个函数,称为内部/内嵌函数。
15. 函数的可变参数
Python的可变参数非常灵活,可以有非关键字可变长参数和关键字变量参数(字典)两种。C#只支持非关键字可变长参数,而且C#的可变参数都必须为同一类型。
16. 模块和文件
Python中一个文件被看作是一个独立模块,一个模块也可以被看作是一个文件。模块的文件名就是模块的名字加上扩展名.py。与其他可以导入类的语言不同,在Python中你导入的是模块或模块属性。C#中与模块功能类似的是名称空间,一个名称空间可以存在于多个文件甚至dll中,在导入名称空间后,其名称空间下的类可以直接使用。
17. 加载引用机制
因为Python代码是不编译的,因此其更适合通过设置搜索路径的方式访问其他的Python代码。而C#是通过添加引用的方式访问其他程序集中的代码。
18. 继承机制
Python支持多继承,体现了面向对象的合成的特性。C#不支持多继承。
19. 抽象性
Python不支持纯虚函数,也没有抽象方法。而C#则支持接口和抽象方法。
20. is 关键字
Python中is用来进行引用比较,测试两个变量是否指向同一个对象。C#中用于判断类型。
21. 类型区分
Python中没有值类型与引用类型之说,所有的类型都是通过引用进行传递,区别于C#。
22. 多态性
Python不支持方法或函数重载,其本身有默认参数功能,可以通过设置默认参数的方式实现重载相同的功能。C#支持重载。
23. 局部变量作用域
Python中判断/循环/异常语句里面定义的局部字段,在语句外依然可以访问,可能因为其为动态类型。C#需要在语句之前先声明,否则不能访问。
>>> if True:
... iads = 1
... else:
... iasd = 2
...
>>> iads
1
>>> iasd