任我行

一天一个脚印......
每日一句:
posts - 54, comments - 218, trackbacks - 1, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Python学习(一)

Posted on 2005-10-11 16:51 任我行 阅读(1125) 评论(0)  编辑 收藏 引用 所属分类: Python
一、下载安装
最新版本:2.4.2
Windows
  下载 Python-2.4.2.exe,运行安装
         http://www.python.org/ftp/python/2.4.2/python-2.4.2.msi

其它平台
  下载 Python-2.4.2.tgz 或 Python-2.4.2.tar.bz2,
  tar -zxvf Python-2.4.2.tgz 或bzcat Python-2.4.2.tar.bz2 | tar -xf -
  ./configure
  make
  make install
二、语法
1、函数声明
关键字 def 为函数声明的开始,不区分有返回值的函数与无返回值的函数。它没有子程序,全部都是函数。
函数没有定义返回的数据类型。如果函数执行了一个 return 语句,它将返回一个值,否则会返回 None (Python的空值)。
参数 params 并不需要指明数据类型


2、文档字符串
任何在三重双引号中的东西都是函数的文档字符串,它们用来说明函数可以做什么。
如果存在文档字符串,它必须要在函数中的被首先定义(也就是说在冒号后面被定义)。
文档字符串在运行时可作为函数的属性。


3、在Python中每个东西都是对象
并且几乎每个东西都有属性和方法。
所有的函数都有一个内置的属性 __doc__,它会返回在函数源代码中定义的文档字符串。


4、缩排代码
Python函数没有明显的 begin 或 end,或任何括号或大括号来标识函数开始结束。唯一的分隔是通过一个冒号(:)和代码本身的缩排来表示。
代码块(函数,if 语句,for 循环,等等)通过它们的缩排来定义。缩排表示块的开始,非缩排表示结束,不存在明显的括号,大括号,或关键字。这就意味着空白是有意义的,并且要一致。


5、if __name__
在 if 表达式周围不需要小括号
象C语言一样,Python使用 == 进行比较,使用 = 进行赋值。
模块是对象,并且所有的模块都有一个内置属性 __name__。如果 import 模块,那么 __name__ 的值通常为模块的文件名,不带路径或者文件扩展名。如果直接运行模块, __name__ 的值将是一个特别的缺省值, __main__。
通过在程序中加入下一个if,就可以很简单地实现单元测试。
if __name__ == "__main__":


6、字典
Python的内置数据类型之一是字典,它在关键字与值之间定义了一对一的关系。这一点就象Perl中的关联数组,Java中的 Map ,或VBScipt中的 Scripting.Dictionary 对象。如:
>>> d = {"server":"mpilgrim", "database":"master"}
1)每一个元素都是一个键-值对,整个元素集合用大括号括起来,赋值给变量d.
2)server 是一个键字,它所关联的值为 mpilgrim,用 d["server"] 来引用.
3)你可以通过键字来得到值,但是不能通过值得到键字。
>>> d["database"] = "pubs"
4)可如上式一样修改字典.
5)不能在一个字典中有重复的键字。给一个存在的键字赋值会抹掉原来的值。
6)可以在任何时候加入新的键-值对。这种语法同修改存在的值一样。
7)字典没有元素顺序的概念。
8)字典的值可以是任意数据类型,包括字符串,整数,对象,或者甚至其它的字典。
9)字典的关键字要严格一些,但是它们可以是字符串,整数和几种其它的类型
>>> del d['server']
10)可如上式一样删除元素
>>> d.clear()
11)可如上式一样清空所有元素


7、列表
1)个列表是一个用方括号包括的有序元素集。
>>> li = ["a", "b", "mpilgrim", "z", "example"]
2)可如上式定义列表
3)一个列表可以象一个以0开始的数组一样使用。任何一个非空列表的第一个元素总是 xxx[0]。
4)负数索引从列表的尾部开始向后计数存取元素。li[n] == li[n – len(li)],如:
>>> li[-3]
结果为"mpilgrim"。
5)任何一个非空的列表最后一个元素总是 li[-1]。
6)你可以通过指定2个索引得到列表的子集,叫做一个“分片”。返回值是一个新的列表,它包含了列表中按顺序从第一个分片索引开始,直到但是不包括第二个分片索引的所有元素。
7)如果一个或两个分片索引是负数,分片也可以工作,但如果两个索引的所代表的位置大者在前则返回空列表。
8)如果任一个分片索引为0,你可以将其省略,默认为0。所以li[:3]同li[0:3] 一样。
9)li[:n] 将总是返回前 n 个元素,而 li[n:] 将返回其它的元素。
10)如果两个分片索引均省略,将包括列表的所有元素。但是与原始的列表 li 不是同一个,它是一个新的列表,恰好拥有与 li 全部一样的元素。li[:] 是生成一个列表拷贝的缩写。
11)append 增加单个元素到列表的尾部。如:
>>> li.append("new")
12)insert 在列表中插入单个元素。数值参数是使得列表增加的第一个元素的索引(注意,不是序号).如下:
>>> li.insert(2, "new")
13)列表元素不需要唯一
14)用extend 连接列表。注意不要用多个参数调用 extend ,要使用一个列表参数调用。如下:
>>> li.extend(["two", "elements"])
15)index 在列表中查找值第一次的出现并返回索引值
>>> li.index("example")
16)如果在列表中没有找到值,Python会引发一个异常
17)要测试一个值是否在列表内,使用 in,如果值找到了,它返回 1 ,或者没找到则为 0 。(在Python中不存在布尔类型。在一个布尔上下文中(象 if 语句),0 是假,所有其它的数值为真。这一点也可以扩展到其它类型。一个空串(""),一个空列表([]),和一个空字典({})都是假,所有其它的字符串,列表,和字典是真。)如:
>>> "new" in li
18)remove 从列表中除掉第一次出现的值。(仅第一次出现的值),如:
>>> li.remove("new")
19)如果在列表中没有找到值,Python引发一个异常。它反映了 index 方法的行为。
20)用pop除掉列表的最后一个元素,然后返回除掉的值。注意这一点同 li[-1]不同,后者返回一个值但不改变列表,也不同于 li.remove(value),后者改变列表但不返回值。如:
>>> li.pop()
21)列表也可以用 + 操作符连接起来。list = list + otherlist 相当于 list.extend(otherlist)。但是 + 操作符将连接后的列表作为一个值返回,而 extend 仅修改存在的列表。如:
>>> li = li + ['example', 'new']
22)Python支持 += 操作符。li += ['two'] 相当于 li = li + ['two']。+= 操作符可用于列表,字符串,和整数,并且它也可以在用户定义类中被重载。
23)* 操作符作为一个重复符可用在列表上。li = [1, 2] * 3 相当于 li = [1, 2] + [1, 2] + [1, 2], 将三个列表连成一个。


8、序列
1)序列是不可变列表。一旦创建了一个序列就不能以任何方式改变它。
2)序列的定义同列表的定义方式相同,除了整个元素集是用小括号包围的而不是方括号
3)当分割一个列表时,会得到一个新的列表;当分割一个序列时,会得到一个新的序列。
4)序列没有方法,所以不能查找、删除和增加元素,但可以用in来检查元素是否在序列里。
5)序列比列表操作速度快。
6)序列可以在字典中被用作关键字,但是列表不行。
7)内置的 tuple 函数接收一个列表,返回一个有着相同元素的序列。而 list 函数接收一个序列,返回一个列表。从效果上看,tuple 冻结一个列表,而 list 解冻一个序列。
8)序列用在字符串格式化.
9、变量
1)Python象大多数其它语言一样有局部和全局变量,但是它没有明显的变量声明。变量通过赋值产生,当超出作用范围时自动消灭。
2)当一条命令用续行符(“\”)分割成多行时,后续的行可以以任何方式缩排,Python通常的严格的缩排规则不需遵守。
3)严格地讲,在小括号,方括号或大括号中的表达式(如定义字典)可以用或者不用续行符(“\”)分割成多行。
4)Python不允许你引用一个未被赋值的变量,试图这样做会引发一个异常。


10、字符串格式化
1)基本语法如下:
"带占位符的字符串" % (参数序列)
2)试图将一个字符串同一个非字符串连接会引发一个异常。字符串连接只能在每个都是字符串时起作用。此时选择格式化串会是个不错的主意。


11、映射
1)基本语法如下:
[ 函数或表达式 for 循环变量 in 列表/序列 ]
2)映射是通过循环遍历一个列表/序列,并对每个元素应用一个函数,然后返回一个包含为计算后的值的新列表。
3)注意列表映射不改变被映射的列表。
4)新列表拥有与原有列表/序列拥有相同数量的元素数


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理