设为首页 收藏本站
查看: 458|回复: 0

[经验分享] 给C++程序员的Python初学指南 / Guide to Python for C++ Programmers

[复制链接]

尚未签到

发表于 2017-5-2 09:07:03 | 显示全部楼层 |阅读模式
给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进行某些操作  
  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开始吧。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-371897-1-1.html 上篇帖子: python之记录一次内存泄露 下篇帖子: Python开发环境Wing IDE如何调试Blender的Python代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表