Python初学随笔

来源:互联网 发布:阿里云备案域名购买 编辑:程序博客网 时间:2024/06/06 23:59

 

 这些天菜菜折腾了下Python,和大家分享一下学习心得、遇到的问题,希望能够和也正在学习Python的童鞋共勉;希望正在学习dynamic语言的童鞋能给出宝贵意见。

1.Python是一门shell语言,它内置了很多函数可以直接对OS操作,能够生成字节码,这也是它跨平台的一个原因,虽然我初学,都是在交互环境下编程,但是还没真正用过它做shell编程呢。

2.Python是一门动态语言,和ruby一样,崇尚Duck Typing(这一条菜菜打算多啰嗦一点)。所谓Duck Typing,就是“它叫起来像鸭子,走起来像鸭子,那么它就是只鸭子”,在编程语言里面理解这句话就是,一个对象,它是什么“类型”不重要,重要的是它能实现何种功能,解释器在编译时不会检查它的类型,只是在运行时才执行所调用的方法。(学过js的同学,应该很好理解吧,嘿嘿。)

在学习python的这几天里,很少看到会有象原来做Java开发时的接口出现,感到很奇怪,于是去查了些资料,又重新学习了一遍接口。

Interface:是某类行为或功能的抽象。是一种开关或者是契约。

在Java开发中,不管是自己设计框架(Pattern)还是运用别人已有的框架(例如Spring),都会经常自己定义接口,或者看到别人的接口。根据上面的定义,接口是一种抽象,利用这种抽象可以达到代码的复用(这应该就叫做抽象层的复用吧,面向对象的精髓,呵呵)。这里就不对接口以及抽象类做太多的解释,关于这个话题,有时间菜菜会写一篇“Java接口与抽象类”的文章,今天重点看一下Python为什么不需要接口。

正如上面讲到的,接口提供了一种规范,规定了调用者能够调用哪些服务。看下面一段代码,我们来看一下Python和Java在处理相同问题时的不同解法

 

这是Python的写法,上面的def是定义个一个方法,传入参数obj,调用obj的func()方法。 在Java中大家肯定会相当用Interface,想到IOC,但是Python不需要,直接传入a,b,不管a,b是何种对象,只要有func方法就行。 这就是前面提到的鸭子打字法。 

菜菜当时是看到这里,然后想到Java里面的编译类型,运行类型(例如 Interface  a = new ConcreteClass()  a的编译类型为Interface,运行类型为ConcreteClass).然后对比到python的动态语言特性,感觉自己理解到了为什么不需要接口了。

不知道大家看到这一点能否理解(没学过Python的可结合js理解一下),菜菜的表达能力有限,如果不理解,可私下同我一起交流。

3.Python的编码和缩进是让人很蛋疼,又很让人高潮的事情。

先说python的编码吧,这段时间写一个通讯录的demo,被 gbk,big5,UTF-8,gb2312彻底搞懵了。打印汉字的时候,需要注意交互环境的显示编码;运行的时候,注意Python内置函数处理字符串时候的编码方式等等,很让人蛋疼。这里就不贴代码了,只是说明一下Python里面需要特别注意编码问题。

还有Python的缩进,刚开始使用IDLE时,经常就是写一个简单的if else ,然后print一下,程序都跑不起来。折腾了几次,发现就是缩进的问题,在java中,代码块是根据{}来区分作用域的,而在Python中,相同作用域的代码块是必须有相同的缩进的,不然就会报错。顺带着说一下常用的缩进格式:两个空格,四个空格,一个制表符。

4.Python内置数据结构:元祖,字典,列表  

元组 (a,b)

字典{key1:value1,key2:value2}(是不是就是Java的Map字典?)

列表 【a,b,c】

先暂时说以上几点自己的Python学习感触吧,毕竟学的还不多,有错误的地方,还望大家踊跃拍砖,不吝赐教。

接下来,菜菜要多学习下Python的模块、面向对象、多线程,Django Web框架。希望有这方面经验的大侠多多指导哦

 

原创粉丝点击