2007/04/17

python学习笔记(一)

之前粗粗地看了一遍《dive in python》,我觉着要温习一下,打牢些基础。

这个刚上手的字符串操作有些难度哦。

join是加入的意思,默写一个例子:

def test(testStr):
return ";"join(["%s=%s" % k,v for k,v in (testStr.items())])

a={
"a1":1,
"a2":2,
"a2":2,
}
test(a)
>>>a1=1;a2=2;a3=3

把后面数组里的每一个对象用;分隔开。

python是动态强类型语言。类型可以动态获取,但类型之间的转换是严格的。

def a():
""" 这是一个测试函数"""
# ...
访问函数的说明文档:a.__doc__
这个东西的好处在于一些函数的说明可以放在里面,不看源代码的时候也可以访问说明内容。中!
-----------
import
from myapp import blog
这个时候我可以使用blog对象的任何方法OR属性
blog.add
blog.edit
blog.del


sys.path, append

系统路径,就是模块路径,有系统路径,还可以手动增加,系统路径(sys.path)是一个内置的列表(list),所以可以使用append来增加一个对象,增加需要使用的路径
sys.path.append("/myapp/")

万物皆对象
有了这个定义外,就不要老烦着想什么是面象的思想方法等难稿的概念.


代码缩进
这个约定使代码看起来非常优美,结构非常清晰,然后,我在想有一天,python的创始人可能会放弃这一约定.

几个有用的属性

模块如果正被自己运行,而不是被其他程序导入被当做引入模块执行时,可以使用默认属性__name__来判断:

if __name__ == "__main__":
print "您好像正在自己运行着,没有被别人导入 :) "

字典
我不知道把a={}这里的a称作为数组还是字典,不过Dictionary直译的话就是字典的意思,我总是与PHP的数组分不开.
a={"a1"="1","a2"=2}
>>>a["a1"]
>>>"1"
似乎不支持a[0]这样的访问,文章说支持key的类型混用,就是说a[0]被当作键名为0的对象,而不是第一个
添加: 加一个不存在的键名即是添加
删除: del a["a1"]
删除全部: a.clear()
--------

数组
晕,真正的数组是list, :(
list['1','2','3','4']
list[0] 值 '1'
list[-2] 倒数第二个,倒数的时候应在数组项目很多的时候使用比较方便
数组切片
list[1:3] 第2个开始取,取3个,因为数组从0开始计数,这里会有误解,会为从第二取到第四 -_-
list[:3] 首开始位置不写默认为0,即第1个
list[2:] 末尾不写,则表示当前数组长度,从第3个取到最后
list[:] 从开始取到最后,取所有
第一个值为开始位置,第二个值为取的长度

list.append("new") 追回一个元素
list.insert(2,"new2") 插入一个元素,位置在2
list.extend(['tt','cc']) 连接两个数组,把第二个里面的元素添加到第二个里面,现在第一个里面多了两个
list.append(['ss','dd']) 此时会把后面的元素当做一个对象追回到list的末尾,是当做一个对象处理,而不是当作两上元素
list.index("new") 搜索"new"在list中的首次出现的位置
list.remove("new") 删除"new"这个元素
list.pop() 删除list的最后一个元素,并返回被删除的这个元素的值
list+list2, list+['google'],list+=['baidu'],list=list*3 数组的相加,会把list2中的值加到list的末尾,也可以用乘法,会复制3份,如 1,2,3,1,2,3,1,2,3

tuple
tuple(序列)是固长的数组,不能改变长度,并且没有任何方法,是不是一些如果原始不变的数据就可以放在这里,比如网站的一些固定标题或配置文件一类的东西

批量赋值
(a,b,c)=3
v=(1,2,3)
(a,b,c)=v
a=1,b=2,c=3
可以将序列内的值分别赋给a,b,c

range(7)
是一个数组,界定范围为7个,从0到6,是不是range函数定义的值都是为数字?

"$s=%s" % (a,b)
哦,原来这是一个序列(固长的数组)操作方式,以前只是记者这个固定形式

a=6
print "this is: " + a
会报错,因为a是整型int, 而前面是字符串str, 类型不一样,不能这样链接,哦,晕,似乎不方便哦?
得改成 print "this is %s" % a ...汗!

>>> print "Today's stock price: %f" % 50.4625
50.462500 # 浮点数,默认为6位
>>> print "Today's stock price: %.2f" % 50.4625
50.46 # 浮点数,保留2位小数
>>> print "Change since yesterday: %+.2f" % 1.5
+1.50 # 浮点数,输出值的符号并保留两位小数

>>>li = [1,2,3,4]
>>>[elem*2 for elem in li]
会输出什么?
[2,4,6,8]

items是字典类型数据的一个函数
test.imtes() 会返回一个tuple类型的list,不可变长的数据,把前面的字典变成了固长的序开

>>>li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
>>>s=";"join(li)
呵,这下写出来顺多了,这里就像第一节的例子一样
返回值是什么呢?
>>>'server=mpilgrim;uid=sa;database=master;pwd=secret'
以;为分隔符一个字符串
怎么重新分隔开来?
s.split(";",1) 会分隔开来,但这里有一个1限制,只是分隔一次,就是只处理了第一个;,后面的没有处理


还没学完,这位作者留了一招,狠! 如何把所有的;处理掉?可以不写或者要写上固定长度么?
s.split(";",len(s))
?
s.split(";")
?

困了,最近工作不顺,条理都没有了,又对网络有些无趣的感觉.

睡觉去! 我还在网吧呢 -_-

没有评论: