为了丰富一下自己的视野,最近在利用《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:
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的使用可以参考下面的代码片段:
5 Tuple的定义
Python使用Tuple来存储一些固定的集合,Tuple基本上与List类似,但其值是固定的,一旦创建后就不能添加/删除了。Tuple主要用在存储一些固定集合(比如星期集合、月份集合等),另外Tuple还可以用作Dictionary的键值、(在buildConnectionString函数我们就到了这点)。
在Python中我们可以用("value1","value2","value3")的样式来定义Tuple,具体用法可以参考以下的代码片段:
6 变量的定义
在Python中使用变量不需要提前定义,直接使用即可,需要注意的Python不允许引用未初始化的变量,如果直接引用未初始化的变量会引发异常,关于变量的使用可以参考以下代码片段:
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难免有理解的不对的地方,希望不会给您造成误解。