给C++程序员的Python初学指南 / Guide to Python for C++ Programmers
2010年06月28日
传闻中的begtostudy希望您继续将他传闻下去!这里留下了begtostudy成长的印记!如果是技术上的问题,最好能够在这里评论或者留言,因为这样其他人也能看到和探讨。 严正声明:本blog原创文章转载请标明出处或作者begtostudy!!! QQ:370566617. Email/MSN:begtostudy@gmail.com
这篇短小的文章只是把一时 想到的东西记了下来,肯定有很多不足,大家就作为娱乐吧:)。
首先不要太多考虑怎样开始Python,你仅仅需要的只是开始的行动。Python是及其直观的语言,特别是当你有其 他相关语言编程经历时。
现在就下载适合你系统平台的 Python分发版。(是Linux?那你可能已经准备好了;是Windows?那就下载二进制安装文件[python.org]或是 activestate安装文件吧)
按照一些网上的教程你就可以开 始你的手指运动了。你可能需要一个编辑集成环境。 -- 我发现SciTE和PyScripter 对于初学者 是个不错的选择。 == 从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 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分钟以上关于括号位置的争论)
* 不能忘记的小括号()。 调用一个对象的方法时你必须使用小括号。(不用多说了)
* 不要再使用变量去思考地址和存储位置,学会考虑为绑定在一个名字上的值。 尽管这样我还是经常使用"变量赋值",当然我应该使用的是"命名绑定"。
* 高级特性:动态验证(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)和 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里返回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),你就能看到刚刚的说明文字。这叫作文档字符串,
只能是对象(类,函数,模块)才能拥有。
* 一个极大的通用模块库。 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开始吧。
发表评论
-
Python GUI编程-了解相关技术[整理]
2012-01-20 09:39 1151Python GUI编程-了解相关技术[整理] 2011年0 ... -
Python笔记――python简介、特点、安装及helloworld
2012-01-20 09:39 665Python笔记――python简介 ... -
深入Python3 (Dive Into Python3)笔记11--文件
2012-01-20 09:39 935深入Python3 (Dive Into Python ... -
eclipse开发python+qt
2012-01-20 09:39 1103eclipse开发python+qt 2011年05月12日 ... -
穿越亚细亚行笺[18国家和地区旅行攻略]-转
2012-01-19 14:42 939穿越亚细亚行笺[18国家 ... -
外贸找客户的几十种方法,总有一种适合你
2012-01-19 14:42 1700外贸找客户的几十种方法,总有一种适合你 2011年08月20 ... -
办签证
2012-01-19 14:42 493办签证 2011年11月17日 去越南属于出国,必须办理 ... -
告别光棍有新法
2012-01-19 14:42 540告别光棍有新法 2011年02月28日 越 ... -
MFC消息处理和消息映射的概念
2012-01-17 04:27 652MFC消息处理和消息映射的概念 2011年08月25日 ... -
Windows SDK编程(Delphi版) 之 消息处理
2012-01-17 04:27 501Windows SDK编程(Delphi版) ... -
VC消息映射
2012-01-17 04:27 577VC消息映射 2010年08月14 ... -
在.net中基于Windows消息的IPC实现
2012-01-17 04:27 534在.net中基于Windows消息的IPC实现 2011年0 ... -
VC++日记(非模态,自定义消息,窗体移动……)
2012-01-17 04:27 999VC++日记(非模态,自定义消息,窗体移动……) 2011年 ... -
根在故乡
2012-01-16 03:17 659根在故乡 2011年12月06日 ... -
我心中完美男人的形象
2012-01-16 03:17 555我心中完美男人的形象 2011年12月18日 一 ... -
■反击关于盗墓一点也不腐つ
2012-01-16 03:17 595■反击关于盗墓一点也不腐つ 2012年01月07日 首先 ...
相关推荐
In C++11 for Programmers , the Deitels bring their proven Live Code approach to teaching today’s powerful new version of the C++ language. Like all Deitel Developer titles, they teach the best way ...
Extending C++ with .NET Features In a very similar way, C++/CLI is layered on top of C++. C++/CLI provides a high degree of source code compatibility with C++. As a consequence, the following code is ...
Learning one of the most prominent and dynamic programming language to date, which has evolved itself to be as much powerful and versatile as Java or C++, but is much friendlier to new programmers!...
tutorial for C/C++ programmers Python/C API reference for C/C++ programmers Installing Python Modules information for installers & sys-admins Distributing Python Modules sharing modules with others...
一本关于Tcl / Tk的自学书籍,其中包含200多个已解决的练习。 所有练习都在Windows和Unix版本的Tcl / Tk上运行。
Illustrated Guide to Learning Python is designed to bring developers and others who are anxious to learn Python up to speed quickly. Not only does it teach the basics of syntax, but it condenses years...
Raspberry Pi cookbook for Python Programmers is a practical guide for getting the most out of this little computer. This book begins by guiding you through setting up the Raspberry Pi, performing ...
这里是 ShowMeAI 持续分享的【开源eBook】系列!内容覆盖机器学习、深度学习、数据科学、数据分析、大数据、Keras、TensorFlow、PyTorch、强化学习、数学基础等各个方向。整理自各平台的原作者公开分享(审核大大请...
c++11 for programmers
C++ for Java Programmers is a concise, well-written text that provides authoritative and up-to-date coverage of key features and details of C++, with a special focus on how C++ compares to Java....
The main objective of this book is to provide a guide to the architecture and assembly language of the popular RISC processors. In all, we cover five RISC designs in a comprehensive manner. To ...
Expert C++/CLI .NET for Visual C++ Programmers Word版
Raspberry Pi Cookbook for Python Programmers is a practical guide for getting the most out of this little computer. It will guide you through the many uses of the Raspberry Pi and allow you to ...
In C++11 for Programmers , the Deitels bring their proven Live Code approach to teaching today’s powerful new version of the C++ language. Like all Deitel Developer titles, they teach the best way ...
C++ for Java Programmers.rarC++ for Java Programmers.rarC++ for Java Programmers.rar
Written for programmers with a background in another high-level language, this book uses hands-on instruction to teach today’s most compelling, leading-edge computing technologies and programming in ...
C++17 - The Complete Guide by Nicolai M. Josuttis Giving guidance on how to use Language and Library Features of C++17 For programmers, who want to switch to the latest version of Modern C++
The ACE Programmer's Guide is a practical, hands-on guide to ACE for C++ programmers building networked applications and next-generation middleware. The book first introduces ACE to beginners. It then...
【《程序员数学指南》各章实现代码(Python)】’programmers-introduction-to-mathematics - Code for A Programmer's Introduction to Mathematics'