1、python中的函数以def来定义,利用缩进来表示函数的完整性,Python函数没有明显的begin和end,没有花括号,用于标函数的开始和结束。
唯一的分隔符是一个冒号(:),接着代码本身是缩进的。
如:def hello():print“Hello,world\n”hello()#调用hello函数2、所有的Python模块都是对象并且有几个有用的属性。
您可以使用这些属性方便地测试您所书写的模块。
下面是一个使用if__name__的技巧。
if__name__=="__main__":3、d={"server":"mpilgrim","database":"master"}Python中的hash表,利用key来进行查询值当使用dictionary时,您需要知道:dictionary的key是大小写敏感的。
Del d[key]:删除某个值d.clear:清空整个hash队列4、li=["a","b","mpilgrim","z","example"]Python中的数组li[0:3]:表示从0-2,结果为:['a','b','mpilgrim']append向list的末尾追加单个元素。
insert将单个元素插入到list中。
数值参数是插入点的索引。
请注意,list 中的元素不必唯一,现在有两个独立的元素具有'new'这个值,li[2]和li[6]。
extend用来连接list。
请注意不要使用多个参数来调用extend,要使用一个list参数进行调用。
在本例中,这个list有两个元素。
extend(扩展)与append(追加)的差别>>>li=['a','b','c']>>>li.extend(['d','e','f'])>>>li['a','b','c','d','e','f']>>>len(li)6>>>li[-1]'f'>>>li=['a','b','c']>>>li.append(['d','e','f'])>>>li['a','b','c',['d','e','f']]>>>len(li)4>>>li[-1]['d','e','f']Lists的两个方法extend和append看起来类似,但实际上完全不同。
extend接受一个参数,这个参数总是一个list,并且添加这个list中的每个元素到原list中。
在这里list中有3个元素('a','b'和'c'),并且使用另一个有3个元素('d','e'和'f')的list扩展之,因此新的list中有6个元素。
另一方面,append接受一个参数,这个参数可以是任何数据类型,并且简单地追加到list的尾部。
在这里使用一个含有3个元素的list参数调用append方法。
原来包含3个元素的list现在包含4个元素。
为什么是4个元素呢?因为刚刚追加的最后一个元素本身是个list。
List可以包含任何类型的数据,也包括其他的list。
这或许是您所要的结果,或许不是。
如果您的意图是extend,请不要使用append。
从list中删除元素>>>li['a','b','new','mpilgrim','z','example','new','two','elements'] >>>li.remove("z")>>>li['a','b','new','mpilgrim','example','new','two','elements'] >>>li.remove("new")>>>li['a','b','mpilgrim','example','new','two','elements']>>>li.remove("c")Traceback(innermost last):File"<interactive input>",line1,in?ValueError:list.remove(x):x not in list>>>li.pop()'elements'>>>li['a','b','mpilgrim','example','new','two']remove从list中删除一个值的首次出现。
remove仅仅删除一个值的首次出现。
在这里,'new'在list中出现了两次,但li.remove("new")只删除了'new'的首次出现。
如果在list中没有找到值,Python会引发一个异常来响应index方法。
pop是一个有趣的东西。
它会做两件事:删除list的最后一个元素,然后返回删除元素的值。
请注意,这与li[-1]不同,后者返回一个值但不改变list本身。
也不同于li.remove(value),后者改变list但并不返回值。
5、Tuple是不可变list。
一旦创建了一个tuple就不能以任何方式改变它t=("a","b","mpilgrim","z","example")使用tuple有什么好处呢?Tuple比list操作速度快。
如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用tuple代替list。
如果对不需要修改的数据进行“写保护”,可以使代码更安全。
使用tuple而不是list如同拥有一个隐含的assert语句,说明这一数据是常量。
如果必须要改变这些值,则需要执行tuple到list的转换(需要使用一个特殊的函数)。
还记得我说过dictionary keys可以是字符串,整数和“其它几种类型”吗? Tuples就是这些类型之一。
Tuples可以在dictionary中被用做key,但是list不行。
实际上,事情要比这更复杂。
Dictionary key必须是不可变的。
Tuple本身是不可改变的,但是如果您有一个list的tuple,那就认为是可变的了,用做dictionary key就是不安全的。
只有字符串,整数或其它对dictionary安全的tuple才可以用作dictionary key。
Tuples可以用在字符串格式化中,我们会很快看到。
6、range[num]=[0,1,2,…(num-1)]字符串的格式化>>>k="uid">>>v="sa">>>"%s=%s"%(k,v)'uid=sa'7、+是字符串连接操作符。
不能将其用在字符串和非字符串间的连接上如:>>>userCount=6>>>print"Users connected:%d"%(userCount,)Users connected:6>>>print"Users connected:"+userCountTraceback(innermost last):File"<interactive input>",line1,in?TypeError:cannot concatenate'str'and'int'objects3.6.映射listPython的强大特性之一是其对list的解析,它提供一种紧凑的方法,可以通过对list中的每个元素应用一个函数,从而将一个list映射为另一个list。
例 3.24.List解析介绍>>>li=[1,9,8,4]>>>[elem*2for elem in li][2,18,16,8]>>>li[1,9,8,4]>>>li=[elem*2for elem in li]>>>li[2,18,16,8]为了便于理解它,让我们从右向左看。
li是一个将要映射的list。
Python循环遍历li 中的每个元素。
对于每个元素均执行如下操作,首先临时将其值赋给变量elem,然后Python应用函数elem*2进行计算,最后将计算结果追加到要返回的list中。
需要注意是,对list的解析并不改变原始的list。
将一个list的解析结果赋值给对其映射的变量是安全的。
不用担心存在竞争情况或任何古怪事情的发生。
Python会在内存中创建新的list,当对list的解析完成时,Python将结果赋给变量。
声明位于第2章的函数buildConnectionString对list的解析:["%s=%s"%(k,v)for k,v in params.items()]首先,注意到您调用了dictionary params的items函数。