IMZRH的日志

努力成为一个有用的人

导航

Python学习之二:《Dive in Python》学习笔记一

Posted on 2010-04-30 21:46  张荣华  阅读(1285)  评论(3编辑  收藏  举报

为了丰富一下自己的视野,最近在利用《dive in python》这本书学习Python,下面是我的读书笔记第一篇:

首先来看一个Python的函数以便对Python有一个第一印象:

代码
1 def buildConnectionString(params):
2 """ Build a connection string from a dictionary of paramters
3 return string. """
4 return ";".join(["%s=%s" % (k,v) for k,v in params.items()])
5  if __name__ == "__main__":
6 myParams= {"server":"local",\
7 "database":"master",\
8 "user":"sa",\
9 "password":"123"\
10 }
11 print buildConnectionString(myParams)

上面是利用Python语言定义了一个名叫"buildConnectionSTring"的函数(Function),该函数的作用将输入的连接字符串用";"连接起来并显示在屏幕上。可能有很多第一次接触Python的童鞋看不懂这个Function,不要紧, 下面我们来解释一些这个Function所用到的知识点。

1 Function的定义:

首先我们来看在Python中怎么定义一个Function。 在Python中Function的定义形式是这样的: 

1 def functionName (Parameters):
2 Function body

就像我们在C#中定义一样类需要使用class关键字一样,def关键字就是用来定义的Function。 在def后面紧跟的functionName, functonName和其它语言的标识符一样,没有什么特殊的地方。functionName之后的Parameters和其它语言一样没有什么好说的。  在Parameters后面的":"是一个比较好玩的东东, 在Python不像C#可以用"{}"来标识代码块,在Python中代码是以缩进来标识的, 对于buildConncectionString函数来说,从":"开始直到碰见和def关键字相同缩进的字符,这中间的内容都算是buildConnectionString的函数体。 可能一些像我这样的平常主要用C#语言的童鞋觉得有点别扭, 对使用":"表示函数体的开始以及强制用缩进来区分代码不太适应, 不过仔细想想这样还是有很多好处的,最明显的一个好处就是强制统一了所有程序员的编码风格,便于阅读他人的代码。(XD:话说在像C#这样的语言里读一些不注意编码风格的童鞋的代码真是痛苦呢,对一些风格不好的代码如果不用Resharper按自己的风格reformat一些还真是读不下去呢!)

对于上面的函数定义,细心的童鞋可能注意到了, 和C#的函数定义相比,在Python中定义函数是不需要指定访问限制符和返回类型,另外对于参数我们也不需要指定它们的类型。

2 Function的注释

从软件工程的角度来讲,我们除了对标识符的命名做到"见名知义"之外还需要对一些函数进行注释。 在C#语言中我们可以按照下面的样式进行注释:

       /// <summary>
///
the purpose fo method
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public int foo(int a , string b )

Python对Funcion注释机制和C#稍有不同,我们只能在Function Body的处通过"""Smmary content"""的形式来给Fuction写注释,请注意一定是要在写在FunctionBody的首行,如果不是写在首行是不起作用的。给Function注释后,在Python中我们可以用"FuncionName.__doc"__"的样式在代码中得到Function的注释,比如我们利用"print buildConnectionString.__doc__"来打印buildConnectionString的注释。

3 Dictionary的定义

Python中的数组大概相等于C#中的HashTable,可以用{"key1":""value1", "key2","value2"}的样式定义,比如:我们可以用{"Server":"Localhost","Database","master",3:"sa"}来定义一个Dictionary。然后可以在代码中用以下的代码访问Dictionary:

 

Dictionary Usage
d = {"Server":"localhost", "Database":"master", 3 :"sa"}
print d # {3: 'sa', 'Database': 'master', 'Server': 'localhost'}
print d["Server"] #localhost
print d["server"] #Error
print d[3] #sa

d[
"password"] = "123" # add a new key/value pair.
print d["password"] # 123

del d[3] #delete the item 3
print d[3] # Error

在上面的代码中我们定义了一个有三个pair的Dictionary,三个pair的键分别是Server, Database, 3,然后我们又打印了整个Dictionary和Dictionary中的个别元素,最后我们新增、删除了一个pair,代码比较好懂,和C#中对HastTable的操作比较类似。

4 List的定义

Python中的List大概相当于C#中的ArrayList。我们可以用["value1","value2","value3"]的样式定义一个List,关于List的使用可以参考下面的代码片段:

List Usage

 5 Tuple的定义

Python使用Tuple来存储一些固定的集合,Tuple基本上与List类似,但其值是固定的,一旦创建后就不能添加/删除了。Tuple主要用在存储一些固定集合(比如星期集合、月份集合等),另外Tuple还可以用作Dictionary的键值、(在buildConnectionString函数我们就到了这点)。

在Python中我们可以用("value1","value2","value3")的样式来定义Tuple,具体用法可以参考以下的代码片段:

Tuple Usage

 6 变量的定义

在Python中使用变量不需要提前定义,直接使用即可,需要注意的Python不允许引用未初始化的变量,如果直接引用未初始化的变量会引发异常,关于变量的使用可以参考以下代码片段:

Varible Declare
1 #d = {"server":"local","database":"master"}
2  p = ('Monday', 'Thusday', # notice: \ is the line continuation marker.
3   'Wednesday', \
4 'Thursday', \
5 'Friday', \
6 'Saturday',\
7 'Sunday' \
8 )
9
10  print x # Error NameError name 'x ' is not defined
11  
12 l = range(7)
13  print l # [0,1,2,3,4,5,6]

 7 格式化字符串

Python中的格式化字符串的用法基本和C#、C中格式化字符串的用法相同,具体用法可以参考下面的例子:

 

k = "uid"
v
= "as"

s
= "%s=%s" % (k,v)
print s #uid=as

age
= "age = %d" % 25
print age # age =25

将知识点介绍完后再来看最初的代码就好理解了,这段代码首先在一个buildConnectionString函数,buildConnection的作用是将参加提供的键值对用;连接起来。 在定义完函数后,代码接着写了一段buildConnection函数的测试代码。在Python中如果直接执行一个函数,则__name__ == ”__main__”,所以在Python中一般都利用这个特性来方便的测试代码)

 

以上是我用《dive in python》这本书来学习Python的读书笔记的第一篇,刚接触Python难免有理解的不对的地方,希望不会给您造成误解。