显示标签为“Python”的博文。显示所有博文
显示标签为“Python”的博文。显示所有博文

2007年2月25日星期日

Python笔记(5)——小试身手

这些天磨磨蹭蹭地看完Python 2.5的文档的第三章了。结束部分举了个例子,更是让我为Python拍手称奇!



a,b=0,1
while b<10:
print b
a,b=b,a+b


会打印出10以内的Fibnacci数,每行一个,多么简洁呀!最新鲜的是那两个赋值语句,一个“=”竟然同时给两个变量完成了赋值!至少到目前为止我还没有在其他的语言中发现有这个特性的。
不过一个数占一行未免有些浪费屏幕,这时只需在print b后面加上一个逗号“,”,于是就成了:


a,b=0,1
while b<10:
print b,
a,b=b,a+b


输出就成了一行了,两个数之间都用空格隔开。

1 1 2 3 5 8

如果你仔细观察,你会发现print很有智慧:空格仅仅在“两个数之间”出现,而在第一个的前面和最后一个的后面却没有!你也许会说,这有什么了不起的?嗯,想想你在C语言中是怎么样做的吧,是不是要对第一个或者是最后一个做“特殊处理”?
Python入门内容就到这里吧,以后还有很多东西要学的呀。

Python笔记(4)——List

把一堆东西东西放在一起就构成了一个List,当然这个“一堆”不一定指一个以上,也可以仅仅有一个,甚至是什么都没有。

>>>a=['spam','eggs',100,1234]
>>>a
['spam','eggs',100,1234]
>>>a[0]
'spam'
学过其他语言的可能会觉得这有点像数组,下标从0开始;但又有所区别。看上面的例子得知,一个List中的元素类型不一定是同一种。要重点指出的是,Python淡化了类型的概念。
有意思的是,List的元素下标可以从右边数起:对上个例子而言,最右边的是a[-1],靠左一点的是a[-2],等等。这有什么用呢?比如让你显示出一个List中第二个到倒数第二个中的所有元素,你当然可以先找到这个List的长度,不过这不是Python的做法,那是C++/Java一类的。更地道的是用:
>>>a[1:-1]
['eggs',100]
再举两个List运算的例子:
>>>a[:2]+['bacon',2*2]
['spam','eggs','bacon',4]
>>>3*a[:3]+['Boo!']
['spam',eggs',100,'spam','eggs',100,'spam','eggs',100,'Boo!']
List中的元素是可变的,这一点了字符串不太一样:
>>>a
['spam','eggs',100,1234]
>>>a[2]=a[2]+23
>>>a
['spam','eggs',123,1234]
也可以改变List中的一个Slice,这样可以相当直观的进行删除插入操作:
>>>a[0:2]=[1,12]
>>>a
[1,12,123,1234]
>>>a[0:2]=[]
>>>a
[123,1234]
>>>a[1:1]=['bletch','xyzzy']
>>>a
[123,'bletch','xyzzy',1234]
>>>a[:0]=a
>>>a
[123,'bletch','xyzzy',1234,123,'bletch','xyzzy',1234]
>>>a[:]=[]
List中元素的个数可以用len()来取得:
>>>len(a)
8
刚才说List的元素类型不限,可以推想,一个List也可以作为另一个List的元素:
>>>q=[2,3]
>>>p=[1,p,4]
>>>len(p)
3
>>>p[1]
[2,3]
>>>p[a][0]
2
>>>p[1].append('xtra')
>>>p
[1,[2,3,'xtra'],4]
>>>q
[2,3,'xtra']
注意这里:q和p[1]引用同一内存区域,对其中一个的改变都会影响到另一个。

2007年2月23日星期五

Python笔记(3)——字符串(续)

Unicode
使用Unicode字符串很简单,只需在前面加个“u”就可以了。

>>>u'Hello world!'
u'Hello world!'

Unicode可以支持更多的字符,可以直接用Unicode编码:
>>>u'Hello\u0020world!'
u'Hello world!'

\u0020表示编码为0x0020的字符(也就是空格)。对于Unicode字符串,可以用str函数将其转换为普通字符串:
>>>str(u"hello")
'hello'

Python笔记(2)——字符串

表示方法
在Python中,像'single quotes'和"double quotes"这样包含在单引号或双引号里的内容称为“字符串”。和数值类似,字符串也可以认为有一个值——就是它本身。例如:

>>>'single quotes'
'single quotes'

但如果字符串内容本身包含引号又应该怎样表示呢?方法是用反斜线“\”来“转义”,例如单词“Doesn't”,要写成
>>>'Doesn\'t'
"Doesn't"

注意和上个例子比较一下。刚才输出的字符串是用单引号括起来的,而这时变成了单引号。再看几个例子:
>>>"Doesn't"
"Doesn't"
>>>"Doesn\'t"
"Doesn't"
>>>'You asked: "I can\'t understand."'
'You asked: "I can\'t understand."'
>>>"You asked: \"I can't understand.\""
'You asked: "I can\'t understand."'

经过这些试验,我自己总结了一条规律:由左至右,像一个栈一样,引号依次完成匹配。呵呵,似乎很难理解——我自己也觉得很绕口。简单来说,只要你觉得Python能明白你的意思,就成。
和C语言类似,Python中也预先定义好了一个特殊字符。如\n代表换行符,例如:
>>>"line 1\nline 2"
'line 1\nline 2'

怪了,怎么没有显示在两行上?查阅手册得知,要使用print语句:
>>>print "line 1\nline 2"
line 1
line 2

print是打印的意思,所以细心点就会发现,此时输出结果中已经没有了外围的引号了。
如果我们要显示的字符串里包含了\n之类的字符组合怎么办?例如要打印的就是line 1\nline 2,当然可以用转义的办法去实现,记住“\”要写成“\\”:
>>>print "line 1\\nline 2"
line 1\nline 2

实际上还要一种更方便的方法,就是使用raw string,也就是在字符串前面加个“r”,这样就告诉Python解释器别多操心,只管老老实实地照着原样输出:
>>>print r"line 1\n line 2"
line 1\nline 2

字符串连接
多个字符串可以用“+”来连接,形成一个字符串:
>>>str="hello"+" world"
>>>print str
hello world

这个很简单,没什么可说的。和多数语言不同的是,Python实现了整数与字符串的乘法,显然地,结果就是把一个字符串重复n次:
>>>print "hello! "*3
hello! hello! hello!

是不是很新鲜呢?

在字符串中抽取内容
显然字符串是由一个个字符构成的,那就应该有办法取得里面的单个字符,或者是部分字符构成的字符串(子串)。Python用一个整数下标来表示,下标从0开始:
>>>str="word"
>>>str[2]
'r'
也可以指定一个下标区间,这样就得到了子串:
>>>str[0:2]
'wo'
需要注意的是,[m:n]实际上表示的是[m,n),即不包括下标为n的那个字符。而且下标的用法也很灵活:
>>>str[:3]
'wor'
>>>str[2:]
'rd'
>>>str[:]
'word'
用len()可以得到字符串的长度:
>>>len(str)
4

先领悟一下吧。字符串部分还会涉及到Unicode。我先去休息了。

2007年2月18日星期日

Python笔记(1)——迈出第一步

Python,听这名字有点儿吓人。其实这里的Python不是那种没有腿的令人恐惧的动物,而是一种编程语言,一种在开源世界很流行的编程语言。Python这么多年来已经发展得十分强大,但在人口众多的中国,知道它的人还是相当少,更别说这方面的专家了。
好了,废话不多说,现在切入正题。
获得Python的开发环境很容易,Python社区出的解释器和开发工具都是自由软件,可以很方便地下载。还有一些手册、教程之类的文档,所有这一切都可以在http://www.python.org上找到。
安装完成后会发现它自带了一个叫IDLE的Python开发环境。我建议使用它来学习Python,而不提倡在黑乎乎的“命令提示符”写一行行地写代码——虽然这看上去很cool,IDLE有语法加亮和自动缩进的功能,写代码能省不少力气。
我认为Python和其他语言最多的不同点就是它把缩进作为语法的一部分,不像C++、Pascal那样用特定的标记来划分区块。因此学习Python就会养成良好的编排习惯。相比之下,对于刚开始学诸如C之类的编程语言的人来说,可能要过相当长的一段时间后才能养成代码缩进的习惯。
现在打开IDLE,上面显示了一些有关Python的信息,不必管它。要注意的是光标闪烁的地方,有一个“>>>”的提示符,表明Python解释器已经准备好,随时待命了。现在输入:

2+2

并按下回车键,发现了什么?下一行出现了“4”。Python最简单的功能就是当成一个计算器。

加减乘法没什么问题,除法就稍微复杂一些了。试试5/2?谁都知道结果是2.5,但Python给出的却是2。怎么回事?

Python如果发现分子分母都是整数,就认为你想要的商也是整数,而且这个整数是小于或等于真实值的最大的整数。举例来说,就是8/3=3,-7/3=-3。如果你想要得到小数的结果,只需保证分子分母不都是整数就行了,如5.0/2,8/3.0等等。

Python还可以进行复数计算:

>>> 1j * 1J
(-1+0j)
>>> 1j * complex(0,1)
(-1+0j)
>>> 3+1j*3
(3+3j)
>>> (3+1j)*3
(9+3j)
>>> (1+2j)/(1+1j)
(1.5+0.5j)

complex的作用就是合成一个复数。a+bi在Python中要写成complex(a,b)。