(一)我(非初学者)学Python的方法
在正文开始之前,我先说说自己学Python的方法。接触了不少语言了,但我写的代码90%都是C,加上一些计算机的基础知识,所以我这个家伙也就勉强算是个非初学者吧。我这里说的,就是针对非初学者学习Python的方法,或者说也可以推广为非初学者学习一门新语言的方法了,嘿嘿,咱写程序的,抽象能力得好是不?闲话不多说。首先,得找一本python入门的经典书,在网上搜搜,我读书,只读经典。我选的是《Beginning Python From Novice to Professional 2nd Edition》。然后,看书,先看前言,要先知道本书的针对人群以及一些版块的功能,还可能有一些学习方法,扩展资料等。一本书的前言很容易被人忽略,但有时候前言中会包括一些很重要的信息,有点像磁盘的分区表,路由器的转发表之类的。
接着,就是阅读正文了(这里感谢一下博客园团队教我的用两个全角空格排版的方法,非常的实用)。入门级的书籍一般都是针对没有基础的初学者设计,既然我们不是初学,有很多理论已经明白,比如变量啊,数据类型什么的,这些东西就没必要细看了。我们所关注的应该是:语法,常用数据结构,还有一些Python语言比较特殊的地方。我的方法就是,直接略过文字,看例子程序,如果能够看懂,就在机器上对例子程序进行变幻,试试结果,没问题就继续看,如果例子程序没看懂或者程序结果和我想的不一样,再停下来看文中的描述。这样通看全书例子我觉得有几个好处:1.不漏掉一些虽然简单但是很重要的语言细节。比如 1,2 是声明一个元组,但print 1,2却会打印出1 2.以前我就吃过这样的亏,花了5分钟看完了shell的语法,然后就去看小的project,结果在很多地方卡住,到处找资料,结果却发现很多问题都是基本的语法问题,在书中的例子中都体现的很清楚。虽然通看全书会多花不少时间,但这绝对是厚积薄发的前提。2.通过大量代码示例感受这种语言的代码风格。3.花费很小的代价了解很多基本函数。这也就省去了一些查函数文档的时间。基于这3个原因,所以我最喜欢那种代码与文字描述并重的书。
看完例子,就可以看project了,实战很重要!很高兴《Beginning Python From Novice to Professional 2nd Edition》这本书中就有很多小的project,所以也就又省下很多时间了。磨刀不误砍柴功,可以开始畅游python了。
(二)Python简介
Python很自由,语法简单,函数库多,我最喜欢Python的就是它的缩进,哈哈,全都要靠缩进来解释。对于我这种只爱读清晰代码的人来说简直太棒了。
先把一些需要注意的基础给列出来:
1.'/'除号与c不同,单个'/'是浮点除,两个除号'//'才是整除,而且整除也适用于浮点数,比如3.5//2.2,结果是1.0。
2.乘方的符号是**,两个乘号,太好玩了。
3.Python直接就支持大整数运算,我还用C写过大整数的运算算法,好长的。
4.输入用input,输出用print ,这两个东西都非常灵活,也很好玩。
5.模块,有点类似于头文件,from math import sqrt,这样就可以直接用sqrt函数了。我记得我一哥们读中学的时候,做解方程的题,一个大题下有10个小题,老师要求每个题都写个"解:原式=",然后,那哥们直接就打个大括号,在括号外面写了个很大的"解:原式="。现在想想,真实有异曲同工之妙啊!这里的math就是那个"解:原式="。
6.string可以用单引号括起来,也可以用双引号,没什么区别。当然不能单引号,双引号混用,会有syntax error,这是我试过的,我记得我学shell时也试过,哈哈,天性啊!前段时间用C写了个简易的shell,我只想到用宏替换来实现单引号和双引号的混用,但这样会有问题,比如python中' "happy every day" yes '就会出现混乱的情况。但我现在还没想到更好的办法。三个引号用于一个string分成多行来写。
(三)常用数据结构----list(列表)
list是一种线性的结构,类似于C中的数组,但方法比数组更多。通过对list的一些方法的调用可以实现栈,队列等常见的线性数据结构,可见list是非常灵活的。以下是我总结的list的基础知识点以及一些值得注意的地方:
1.list可以被修改,包括添加,删除,段添加,段删除等,方法很多,运用很灵活。至于具体的函数到处都可以查到,我就不赘述了。
2.list中的元素,类型可以不一样。比如 list1=['neilhappy',123]。这一点就与c中的数组,c++中的容器有区别了,这两者在声明过后,容器中的数据类型都是相同的。
3.list可以通过下标来访问。比如:list1=['a','b','c'],那么list1[0]='a'。还可以访问一段元素,比如list1[0:2],是一个半开半闭的区间,左闭右开,所以结果是['a','b']。还可以加一个参数表示递增的数目:list1[0:2:2],跟matlab很类似。还有一点令我很惊喜,list还可以用负数下标来访问。list1[-1]代表最后一个元素,即'c'。这下strlen,sizeof等函数都可以略微休息下了。
4.string与list的区别。当然,string可以作为list的元素,更重要的是,string可以直接相连:"neil""happy"。但是list必须要有个+号:['neil']+['happy'],结果是['neil','happy']。这一点需要注意一下。
5.list的乘法。这又是我很喜欢的一个特性。以往声明c的数组时:int a[100]={1,2,3,4,5,5,5,5,5,5},好几个5,数的眼花,这下好了,在python中:a=[1,2,3,4]+[5]*6。哇,世界清静了。
(四)常见数据结构----tuple(元组)
tuple与list非常类似,但tuple就像一个被严重限制的list,不准动(被更改),不准变强大(有很多methods),声明方法是tuple1=(1,2,3)或者tuple1=1,2。访问方法与list类似,不再赘述。
(五)常见数据结构----dictionary(字典)
dictionary,实际上就是一组mapping,一种散列的思想。需要注意的知识点:
1.形式。dict1={'name':'neil'}。这里的'name'就是key,'neil'就是value。dictionary就是一些key-value键值对的集合。
2.浅copy与deepcopy。与c++基本类似,浅copy就相当于copy指针,而deepcopy就是在copy指针的同时还要分配相应的内存空间。
3.访问方法:dict1['name']的结果就是'neil'。注意,在dictionary中没有order的概念,所以就不能像list一样用数字下标去访问,得用key去访问。
(六)三种数据结构的区别与联系
python中的容器可以随意的互相包含,这三种数据结构也是如此。list,dictionary可以进行修改,而tuple,string都不能修改,但dictionary的key又必须是不可修改的,即tuple,string。想像一下如果字典的索引都在随意修改会发生什么?
三种数据结构的声明一定要注意,括号不同,数据结构就不同。list:list1=['neil','happy'],这里是方括号。tuple:tuple1=('neil','happy'),这里是圆括号。dictionary:dict1={'name':'happy'},这里是大括号。这里很容易就写错,有可能会造成比较难找的bug.
(七)常见数据类型----string
我记得Peter Weinberger说过:"所有的C程序都做同一件事,观察一个字符,然后啥也不干"。可见string的重要性。也跟上面一样,直接写出我的总结和需要注意的地方。
1.string的访问方法与list,tuple基本一样,string也和tuple一样,不允许修改,但string的方法比tuple强大的多。函数太多,不一一叙述了。
2.用%来进行string的格式化输出。其实与C也没什么太大的区别。
>>> str1
=
"%s %s every day"
>>> name
=
(
'neil'
,
'happy'
)
>>>
print
str1
%
name
neil happy every day
|
(八)基本语句
没什么其他说的,直接写吧:
1.print 1,2,3。这个很好玩,打印出1 2 3 。注意有空格。
2.print a or b.这个语句就相当于if(a!=0){print a};else{print b};极尽简化,太美妙了。
3.unpack机制:很美妙的机制,在我学C的时候我就想,能否一个函数返回多个值,哈哈,python帮我实现了。
>>> tuple1
=
(
3
,
2
,
1
)
|