当前位置:主页   - 电脑 - 程序设计 - C#
从C#到Python:0 前言:进入Python的世界
来源:网络   作者:闫小勇   更新时间:2011-08-15
收藏此页】    【字号    】    【打印】    【关闭

  0.0  写在前面

  首先要说明的是,这并不是一个完备的Python语言教程,因为这样的教程在网络上、书店里已经有太多了。本文的主要目的是希望能够为C#使用者提供一个简短的Python语言入门,以节省他们的学习时间。作为一个C#程序员,你掌握的编程知识已经足够多了。要知道,Python和C#这两门语言是非常相像的,它们之间的关系类似方言与普通话的关系,而不是英语和汉语的关系。你只是需要花点时间了解Python与C#之间的一些微小差别,然后动手编几个小程序熟悉它。你会发现,Python比你想象的要更简单。

  此外,写这个连载的目的并不是比较两门语言的高下,更不是鼓动任何人完全从C#转向Python。我的想法很简单:把学习Python当作一个兴趣,并能在适当的时候使用它。

  考虑到目前两门语言各自版本的普及情况,本文将主要结合C#的2.0版本和Python的2.6版本来进行介绍。对于一些在Python 2.6中已存在的但是在C# 3.0及4.0里才新增的特性,也将会适当提及。

  最后,这个连载将以介绍Python语法为主,初步的章节安排见文后(欢迎提出意见或建议,我会适当调整以符合大家的需要)。如果以后有能力及时间,我会考虑继续写一些GUI、Web开发等相关的内容。

  OK,下面正式开始。

  0.1  安装和配置Python开发环境

  在Python的官方网站可以下载到Windows下的安装包(目前是2.6.4版本),按照提示一路Next下去就可以了。记得安装完成后将Python所在的目录(如C:\Python26)加入系统PATH变量。

  Python的安装包自带了一个简单的集成开发环境——IDLE,你也可以选一个自己喜欢的IDE。我个人推荐PythonWin,它的语法提示功能很不错,适合初学者使用(参见我的另一篇文章《Python IDE的选择》)

编缉推荐阅读以下文章

  • 从C#到Python:2 运算符、表达式和流程控制
  • 从C#到Python:1 变量和数据类型

  0.2  第一个程序:Hello, world!

  现在你可以打开IDLE或PythonWin,新建一个py为扩展名的Python脚本文件,输入以下内容:

  代码1:第一个Python程序

  1 print "Hello, world!"

  保存并运行它,如果输出 >>> Hello, world! ,说明你已经成功编写了第一个Python程序,congratulations!

  上面的“Hello World”几乎是学习任何一门新语言的必经之路,正如提出这个程序的Simon Cozens所说:“它是编程之神的传统咒语,可以帮助你更好的学习语言”。

  为了比较Python和C#在编码风格等方面的差异,下边给出一个稍复杂些的“Hello, world”程序以及它的C#对照版本。

  代码2:唐僧版的Hello, world程序

 1 # -*- coding: utf-8 -*-
 2  """
 3 我的第2个Python程序
 4 仅为和C#作对比,谢绝效仿:)
 5  """
 6  import sys
 7  def Main():
 8   sys.stdout.write("Hello, world!\n")
 9  #下面的语句看起来很怪,一会我们再解释它是干什么滴
10  if __name__ =="__main__":
11   Main()

  注意,代码2第1行# -*- coding: utf-8 -*-,是为了让Python支持中文,这个是必须的。如果你嫌麻烦,可以在IDE里作一个只包含这一行代码的模版文件,以后每次新建Python脚本的时候自动打开这个模版,这样会比较省事。

  代码3:C#的对照版本

 1 /*
 2 我的第1001个C#程序
 3 可能还不到,没写过这么多
 4  */
 5  using System;
 6  class Program{
 7   static void Main(){
 8   if (1==1) //干什么?要搞SQL注入啊?
 9        Console.WriteLine("Hello, world!");
10   }
11 }

编缉推荐阅读以下文章

  • 从C#到Python:2 运算符、表达式和流程控制
  • 从C#到Python:1 变量和数据类型

  0.3  认识二者最基本的差异0.3.1  差异之一:编码风格

  比较代码2、3,可以很容易看出两种语言在编码风格上的差异,下面分别来说。

  (1)代码块与缩进

  C#使用C/C++风格的编码形式,除了要求用{}组织代码块外,语句间的缩进可以是任意的。

  Python强制所有程序都有相同的编码风格,它通过缩进来组织代码块。缩进相同的语句被认为是处于同一个代码块中,在if/else等语句及函数定义式末尾会有一个冒号,指示代码块的开始。Python这种强制缩进的做法可以省去{}或者begin/end等,使程序的结构更为清晰(有的人认为恰好相反),同时也减少了无效的代码行数。

  此外需要注意,尽量使用4个空格作为Python代码的一个缩进单位,最好不使用Tab,更不要混用Tab和空格,这也算是Python的一个非强制性约定吧。

  (2)语句结尾

  C#语句用分号结尾,Python不用任何符号(类似BASIC)。

  实际上Python也可以使用分号结尾,像这样 a = 1 ; b =2 ; c = 3 ; print a,b,c ,不过Python中这种风格多用于调试,应为你可以很容易注释掉这一行就删除了所有调试代码。

  另外,当一行很长时,Python可以用 \ 符号折行显示代码。

  (3)注释方法

  C#用//进行单行注释,用/* */进行多行注释;而Python用#符号进行单行注释,用三引号(可单可双)进行多行注释。

  (4)条件表达式

  C#的条件表达式必须要加括号,见代码3第8行;而Python的条件表达式加不加括号均可(Python程序员一般不加,C/C++/C#程序员一般会加:)

  0.3.2  差异之二:入口方法

  C#语言必须要有入口方法Main(),这是程序开始执行的地方。

  Python语言中没有入口方法(函数),作为解释型的语言,Python代码会自动从头执行(所以在代码2中除了第8行,其它行均属于废话)。

编缉推荐阅读以下文章

  • 从C#到Python:2 运算符、表达式和流程控制
  • 从C#到Python:1 变量和数据类型

  如过你对这点不习惯,可以使用Python代码的内置属性__name__。__name__属性会根据Python代码的运行条件变化:当 Python代码以单个文件运行时,__name__便等于"__main__",当你以模块形式导入使用Python代码时,__name__属性便是这个模块的名字。

  当然,Python中的__name__属性并不是为了照顾C/C++/C#程序员的编程习惯而准备的,它主要目的是用于模块测试。想象一下在C# 中编写一个组件或类代码时,一般还得同时编写一个调用程序来测试它。而Python中可以把二者合二为一,这就是__name__属性的真正作用。

  0.3.3  差异之三:import和using

  在Python写的代码2中,我们首先import sys,这是导入了Python的sys模块,然后在代码里我们可以引用sys模块中的对象stdout及它的write方法。在Python中这是必须的,否则你无法调用sys模块中的任何东西。

  在C#写的代码3中,我们首先using System,这是引入System命名空间,using表明该程序正在使用给定命名空间下的名称(如Console)。对C#这是可选的,如果不事先 using System,你可以在代码中使用全限定名,如System.Console.WriteLine。

  简单的说,Python中的import相当于C#中的程序集引用。一个程序集可能包括一个或多个命名空间,C#中的using是用来引入命名空间的。Python如果想实现和using类似的功能,就需要用到from import语句。例如对于代码2,可以将import sys改写为from sys import *,这样在程序中就可以直接使用stdout.write了。

  最后,import可以出现在代码的任何位置,只要在引用它之前出现就可以。不过为了提高程序可读性,建议还是在所有代码开头书写import。

  0.4  小结

  作为Python语言的入门,本章没有涉及到过多的编程细节,主要比较了C#与Python两种语言在编码风格等方面最基本的差别,要点如下:

  (1)Python使用强制缩进的编码风格,并以此组织代码块;

  (2)Python语句结尾不用分号;

  (3)Python标明注释用#(单行)或三引号(多行);

  (4)Python语言没有入口方法(Main),代码会从头到尾顺序执行;

  (5)Python语言用import引入所需要的模块(关于模块和包的具体内容将在第6部分介绍,见文末目录)

  以上这几点是C#程序员初学Python时最易犯错误的地方,希望引起大家注意。好了,今天就先到这里。

编缉推荐阅读以下文章

  • 从C#到Python:2 运算符、表达式和流程控制
  • 从C#到Python:1 变量和数据类型
其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明