这个专题主要记录《Learning Python 4th》的学习笔记。用于督促自己学完这本书。该书1000多页,可想而知包含的内容还是很多。但作为一门语言,学起来还是很简单的。这里以“条”为单位,简化书中的繁杂的表达,再填上自己的感想。力求全面而又精简地描述python语言的特性。
这些笔记供以后参考。也供朋友们学习。
关于本书的评论,请参见(豆瓣):
http://book.douban.com/subject/2295097/
-----------------------------------------------------------这是分隔符--------------------------------------------------------------
注:这篇适合走马观花,请安装完python,进行各种尝试。
0.安装python:
windows: 进入 python官网,安装python开发包。安装完后。 打开IDLE学习python语言。
Linux: 默认已经安装。你可以选择更新。 打开终端开始学习python语言。
1.Python有三个有特色的数据结构:
list: [ ]
dictionary / set { }
list ( )
例子:
a = [1, 3, 3, 'hello'] #(list)用来动态存放一组数据
b = {'name':'X', 'age':'3'} #(dictionary)类似于map映射
b2 = {'X', '3'} #set
t = (1, 2, 3) #(tuple)类似于不变的list
2.通过import来插入模块:
什么是模块:写一个.py的文件。如hello.py 。 这个文件就是一个模块。和C++的命名空间一样,使用前要using, (这里是import)。
import 后就可以使用模块了里的内容了:
>>>import random #导入标准模块random
>>>random.random() #调用random文件里的random()函数
0.58987889768878 #得到随机数
>>>random.choice([1, 2, 3]) #在list里随机选一个
1
3.strings
strings 可以使用 ‘ 或者 “ 来标注:
正确的标注:’hello', "hello", ' he"llo" '
不正确的标注:'hello" #使用符号不对称
>>>str = 'hello'
>>>len(str) #right 得到长度
>>>str[0] #right 访问第0个字符,与c语言相似。
>>>str[-1] #right 访问最后一个字符
>>>str[-5] #right 'h'
>>>str[-6] #wrong. 大于一圈,不支持。
>>>str[5] #wrong. 越界,不支持。
strings的操作:
这里列出较少的操作。通过dir函数查看strings支持的全部操作:dir(str)
>>>str = 'hello world \n'
>>>str[0] = 'h' #wrong!
>>>str.upper()
'HELLO WORLD \n'
>>>str.rstrip() #去掉末尾空格和\n等
格式化string:
>>>'%s is a %s' %('Tom', 'teacher') #all version
Tom is a teacher
>>>'{0} is a {1}'.format('Tom', 'teacher') #2.6 3.0 版本。类似于c#
Tom is a teacher
4.dir函数
可以通过dir函数查看object或.py文件里面的细节:
>>> b = 'hello'
>>>dir(b) #可以看到有upper等函数
dir(b):
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
然后执行help命令,可以查看具体函数说明:
help(b.upper)
5.遍历
python的遍历与c#类似:
这里用print(i) 来打印数据。
在2.6或更早版本,print 可以这么使用:
print x
2.6,3.0后,print应该这么使用(它是一个函数了):
print(x)
>>>aList = [1, 2, 3]
>>>for i in aList:
print(i)
1
2
3
遍历操作并作为list输出:
>>>[a * 2 for a in aList]
[2, 4, 6]
上面代码的意思是:
遍历所有aList里的元素, 把它赋值给a. 对于每一个a都*2,这些所有结果放入一个list中返回。
这个功能,可以模拟矩阵的操作。如实现提取对角线元素等。
6.in
in关键字可以测试x是否在集合D中:
>>>x = 10
>>>D = [2, 3, 5]
>>>x in D
False
>>>x = 2
>>>x in D
True
7.map
map是关键字与value的映射,采用树的存储结构来提高效率:
>>>D = {'name':'x', 'age':23} #冒号前为key,后为value,所有key必须具有一样的类型。value则不需要
>>>D.get('age') #得到‘age'对应的value
>>>D.get('ageed', 3) #如果得不到,默认是返回None的。也可以指定找不到对应key返回的值。这里是3
>>>D['ageed'] if 'ageed' in D else 3 #与上个命令类似
8.tuple
很可怜,tuple只有两个成员函数:index和count。
前者定位某个给定元素第一个找到的位置,(0位起始)
后者数数给定字符出现的次数
很可怜,tuple不能被改变。
9.File
file尽然是core type: 内置类型。
通过file可以非常轻易地操作文件:
#Files
#files are a core type.
#read:
f = open('data.txt')
text = f.read()
f.close()
#write:
f = open('data.txt', 'w') # 'w'告诉你'写' 读二进制是'rb'
f.write('hello')
f.close()
同样,也可以使用’dir'去查看f object里的内容:dir(f)
10.set
set可以看作是只有key的dirctonary
既然是集合,set支持交,差,并等操作。利用前面5.遍历所讲内容,还可以动态生成一个set:
>>>x = {'a', 'b'}
>>>y = {'b', 'c'}
>>>x&y #:交
set(['b'])
>>>x | y #:并
set(['a', 'c', 'b'])
>>>x - y #:差
set(['a'])
#generate a set:
>>>{x ** 2 for x in [1, 2, 3]}
end