From Cpp to Python

编程入门 行业动态 更新时间:2024-10-06 18:28:57

From <a href=https://www.elefans.com/category/jswz/34/1759250.html style=Cpp to Python"/>

From Cpp to Python

C++程序员的Python初学指南

::-- Roka [2007-03-26 14:46:55]

Contents

1.    说在前面

2.    正文

1.    Python对于C++的特色

3.    说在后面

4.    交流

1. 说在前面

这篇短小的文章只是把一时想到的东西记了下来,肯定有很多不足,大家就作为娱乐吧:)。

首先不要太多考虑怎样开始Python,你仅仅需要的只是开始的行动。Python是及其直观的语言,特别是当你有其他相关语言编程经历时。

现在就下载适合你系统平台的Python分发版。(是Linux?那你可能已经准备好了;是Windows?那就下载二进制安装文件[python]或是activestate安装文件吧)

按照一些网上的教程你就可以开始你的手指运动了。你可能需要一个编辑集成环境。

-- 我发现SciTE和PyScripter对于初学者是个不错的选择。

2. 正文

== 从C++到Python ==

你了解C++,C或是Pascal?

那么你已经了解了if-then-else,while,和for等结构控制语句了。

下面有一些对于熟悉C++的你应该注意的。

* Python里没有switch语句。

你只能使用分段的if/elif/else语句直到你希望的结束。

* Python里没有“?”操作符。

如果你下载的是2.5版本,那么在这个版本里提供了一个

x = true_value if condition else false_value用法来对应“?”操作符。

更一般的技巧是使用

condition and true_vale or false_value。

*忘记new/delete吧。

要建立一个对象的实例,使用new A = A();

要删除一个存在的实例只要让它的名字空间失效或显式的绑定到None上:new A = None。

*忘记"for(x = 0; x < 10; x++)"吧。

Python使用迭代式的循环。

这有点像C++里面的"for(listiter = mylist.first();listiter != mylist.end(); ++listiter)"。

强制执行到n次循环可以使用"for i in range(n):"语法。

内置的range生成一个序列[0,1,2...,n-1]。

注意下面初学者常见的不正常用法:

 list1 = [ 1, 2, 3 ]

 for i in range(len(list1)):

      # 对list1[i]进行某些操作

Instead do:

 for elem in list1:

      # 对在每次循环中指向list1中一个元素的elem进行某些操作。

如果真的想得到list的索引,请用enumerate,如:

 for i,elem in enumerate(list1):

      print "The %d item of the list is %s" % (i,elem)

(注意到输出字符串时使用的占位符了吗?他们就是从C里面借鉴的。)

*忘记大括号{}表达吧。

由于某些原因,这个问题对于一些人很重要,但同时也是一次机会-让你的程序

正常的缩进,并且远离括号。

个人认为最好把你的编辑器设置为替换所有的tab为空格(这也是Python官方的推荐)。

你也可以全部使用Tab,但切忌不要混用。

如果你制定过项目的编程规范,那你会发现这会帮助你节约不少时间。

(至少免去了30分钟以上关于括号位置的争论)

*不能忘记的小括号()。

调用一个对象的方法时你必须使用小括号。(不用多说了)

*不要再使用变量去思考地址和存储位置,学会考虑为绑定在一个名字上的值。

尽管这样我还是经常使用“变量赋值”,当然我应该使用的是“命名绑定”。

2.1. Python对于C++的特色

有什么是Python超越C++独特的功能呢?

*高级特性:动态验证(dynamic typing)(又被称为“duck typing”)

动态验证能大幅度提高开发效率。

 - 没有变量定义

 - 没有方法类型验证

 - 没有必要定义接口

 - 没有模版化的集合

 - 没有不同参数类型的方法重载验证

(如果可以的话,你可以认为没有类型的概念。)

什么?没有在编译时的静态类型检查??

确实,没有。

如果你的方法需要一个类型X的对象,你尽管像X一样的使用它。

如果这不是一个X,你可能会吃惊这也许不会是一个问题。

这里是一个简单的调试例:

def printLengthOf(x):

    print "Length of x is", len(x)

每一个对象都有一个__class__属性,每个类都有一个__name__属性。在C++里面,我不得不通过

复杂的变形来避免写出变量名,可能不直观的用“void*”调用。或看下面的例子:

def printLengthOf(x):

    print "Length of x is", len(x)

x可能会是一个集合类,或者是一个十分类似集合的用户定义类来支持len(如__len__方法的实现)。

这个类甚至不需要在你编写printLengthOf时实际存在,它可能在几年后才有真正的实现。

*一个互动解释器。

这是一个很好的调试工具,不必进入编译/连接/调试循环。

同时也是一个很好的文档系统,可以通过键入help(obj)来得到obj函数或方法的帮助。

*语言的内嵌类型list, tuple(一种不可变list), dict(类似在C++ STL里面的map<x,y>)和 set。

Python是动态验证语言,不必模版化类型的集合,只用迭代它们并使用它们的对象。

 list看起来像:[1,2,3,“aaa", [1,2]]

 tuple看起来像:("Bob", "Roka", "12 34")

 dict看起来像:{1:”jack", 2:"bob"}

 set看起来像: set("a","b","c")

*语言内嵌string和unicode类型

*多从变量赋值。能分解一个list为独立变量:

 a,b,c = 1,2,3

 a,b,c = [1,3,5] (会把1赋值给a,2赋值给b,3赋值给c)

忘记C语言里老土的变量值a,b交换方法: a ^= b; b ^= a; a ^= b;

我们只要:a,b = b,a 就好了。

*复合返回类型。

想在函数a里返回3或4个值?那就返回它们把!

不用再make_pair<>模版,或使用结构体来处理复杂的返回类型等,

会像下面的样子:

 def func():

      return 4,5,6

 a,b,c = func()

*灵活的多行引用。

引用字符串能使用""s, ''s 或(""" """, 和 ''' '''),三重引用能使用于多行。

*内嵌文档字符串。

如果有一个如下写法的函数:

 def func():

      """A function that returns 3 consecutive ints, starting with 4"""

      return 4,5,6

那么在互动解释器里键入help(func),你就能看到刚刚的说明文字。这叫作文档字符串,

只能是对象(类,函数,模块)才能拥有。

*一个极大的通用模块库。

包括SQLite数据库和TK图形库

3. 说在后面

PS:你会比学习Java,Perl跟快的掌握Python,学习那些语言你一定会问“如何掌握XX语言?”。

我用过Jave并且深受Perl折磨。比起Perl,Python 1)没有什么变态的符号和语法,2)性格会更成熟(Perl里“open x or die”呵呵)

Java代码又是如此臃肿(大量不必要的垃圾代码)。

但这决不说明精通Python是容易的,记住下面的信条吧:

"mastering" a language takes years, whatever the language.

你还在看吗?不要浪费时间了,快下载一个python开始吧。

4. 交流

·         好的!建议归类到FromXxxToPython --从 XX 到Python 系列文章里 -- ZoomQuiet

转载于:.html

更多推荐

From Cpp to Python

本文发布于:2024-02-14 15:49:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764296.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Cpp   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!