楼主明天去湾区面一家默默无闻却已经上市了的公司,据说要面python和sql,所以pick up一下。求有工作啊!
楼主使用的是这本书:exploring python,反正是课堂使用的教材。突然怀念起了上CIT590的日子,认识了几个不错的小伙伴。
===================================================================================
python处理数据十分方便,语法松垮,各种不用考虑overflow和声明异常(必要的时候还是要raise exception的),的确蛮好用的:
第一章:
0. # 表示注释
1. 基本类型:
int没有upper bound...太逆天...都不用考虑overflow了
float就是小数啦,2.3e3这种科学记数法也是这一类。
boolean是True / False,逻辑的操作用and / or / not
2. 函数:
abs()可以直接用。。。是一个function
len()返回字符串里面字符个数
min()无论接受多少数字都可以返回最小的那个
int("45")返回45;str(45)返回"45"
eval("45 + 1")就是eval()这个函数接受一条数学公式
type()函数返回一个变量的种类
range(1, 10) 返回1到9的list
raw_input()函数从输入流里面读入输入存为string,input()函数从输入流里面读入,存为number
print statement接受一系列的用逗号(" , ")隔开的值,并且打印出来
3. Indexing(slicing)
[]操作符就是用来取子字符的,str[start: end]返回下标为start到(end-1)之间的字符串
如果start的default值是0,end的default值是len(str)
4. Modules and dot notation
import math就是使用math这个模块,其实就是一个库
第二章:
0. 写python文件
在mac的terminal里面输入idle可以直接使用python的ide!
写一个.py结尾的文件,输入python xxx.py就可以运行
python是一行一行解析的,没有括号表明block,没有分号表明statement结束
1. assignment
sum, diff, prod = x+y, x-y, x*y 这样一起赋值也可以
x, y = y, x 相当于swap,直接被吓哭...
2. conditionals
############## if #############
if percent >= 90.0:
# do 1
elif percent >= 80.0:
# do 2
else:
# do 3
############## while #############
while num != -1:
# do 1
############## for loops #############
for year in range(1, 6): # 1, 2, 3, 4, 5
# do 1
第三章:
0. 定义函数
def areaOfRect (w, h):
return w * h
1. global b 表明b是全局变量
2. raise exceptions
if rate < 0:
raise RuntimeError, 'Negative interest rate'
3. None可以用来初始化一个不知道将来有什么值的变量
作为练习,简单地写一个计算自然底数e的函数:
import math
def cal_e():
fac = 1
e = 1
for i in range(1, 11):
fac *= i
e += 1.0 / fac
return e
def main():
print 'Math module ', math.e, ' calculate e ', cal_e()
main()
第四章:
第一部分:
1. list
list,这个数据结构也是逆天,这样组合也可以:
lsttwo = [1, 2.4, 'abc', [1, 4, 7, 9, 12]]
list是mutable的,可以通过直接赋值来修改里面的值,比如lst[1] = 5
del lst[3]删除下标为3的元素
2.来一波操作:
lst = [1, 4, 7, 9, 12]
>>> lst[2]
7
>>> lst[2:]
[7, 9, 12]
>>> 4 in lst
True
>>> lst + [3, 4]
[1, 4, 7, 9, 12, 3, 4]
>>> [2, 3] * 4
[2, 3, 2, 3, 2, 3, 2, 3]
>>> max(lst)
12
>>> list('abc')
['a', 'b', 'c']
看了这些操作我是觉得很逆天,如此简约
3. list还支持一系列点操作
s.append(x), s.insert(i, x), etc...
4. 二维数组的declare and init:
data = [None] * 5
for i in range(0, 5):
data[i] = [0] * 5
5. zip(),这个函数用来处理与点相关的程序应该蛮好用的:
zip([x1, x2, ... , xn], [y1, y2, ... , yn])
返回n个tuples:
[(x1, y1), (x2, y2), ... , (xn, yn)]
6. Python uses reference assignment
>>> a = [1, 2, 3]
>>> b = a
>>> b[1] = 7
>>> a
[1, 7, 3]
就是a, b指向同一块内存。要想传递一份copy过去可以使用slicing的操作:
>>> b = a[:]
这个reference assignment比较蛋疼的一点是,如果把一个object传递到函数里面,也会改变函数外面这个object的值。
7. equal是相等,identical是指向同一片内存
equal操作符:==,identical操作符:is
8. 排序
使用sorted()函数,或者lst.sort()
sort()函数还可以接受comparator
第二部分:
1. tuple
tup = (1, 2, 3, 2, 1)
2. tuple和list类似,但是tuple是immutable的数据结构,凡是list拥有的不会改变元素值的操作,tuple也可以用
3. tuple最主要的作用是:如果一个函数想返回两个或者更多值的时候,可以用它
第三部分:
1. String
string的操作也有蛮多的:s.count(sub), s.find(sub), s.index(sub), s.split(), s.replace(old, new), etc.
第五章:
0. dictionary
字典其实就是一个associative array
1. 基本操作:
dct = {}
dct['age'] = 27
print dct.get('age')
del dct['age']
info = {'name':'robin jones', 'age':35, 'weight':203}
2.函数:
len(d)
d[k]
d[k] = v
del d[k]
d.has_key(k)
d.items() # return (key, value) pairs
d.keys()
d.values()
d.get(k)
d.get(k, v) # 这个有意思,如果k不存在返回v
3. 简单的练习:
def main():
dct = {}
word = raw_input()
while word != 'quit':
count = dct.get(word, 0)
dct[word] = count + 1
word = raw_input()
# print the word and freq
for word in dct:
print word + ' occurs ' + str(dct[word]) + ' times'
main()
4. 复制dictionary对象使用dict.copy(),不然又两个指针指向同一块内存了
5. persistent variables
可以使用shelve模块来存取永久数据,shelve模块用起来像一个字典对象:
import shelve
data = shelve.open("information") # open a file
data['name'] = 'fred smith' # put info into shelve
print data['name'] # get info out of shelve
data.close()
第六章:
0. Files,太感动,完全不需要处理各种异常(虽然有try...except代码块)!
1. 操作:
f = open("filename")
f = open("filename", "w")
f.read() # return a single character value
f.read(n) # return no more than n character values
f.readline() # return a line
f.readlines() # return all the file as a list
f.write(s)
f.writelines(lst)
f.close()
2. 从url中读取数据:
import urllib
remotefile = urllib.urlopen("http://www.python.org")
line = remotefile.readline()
while line:
print line
line = remotefile.readline()
第七章:
0. class的声明:
class BankAccount(object):
def __init__ (self):
self.balance = 0
def deposit (self, amount):
self.balance += amount
def withdraw (self, amount):
if self.balance < amount:
raise ValueError, "insufficient funds"
self.balance -= amount
def getBalance (self):
return self.balance
def transfer (self, amount, toAccount):
self.withdraw(amount)
toAccount.deposit(amount)
def __str__ (self):
return 'Bank Account Object, balance = ' + self.balance
1. __init__是constructor,这里面的代码有些添加成员变量的意味
__str__类似于java的toString方法
__name__, __main__这些都是内部变量,系统不希望程序猿在一般情况下使用它们
2. python里面的成员变量都是public的,扯啊...
3. 写类的方法的时候记得把self这个成员变量也写进参数里面
4. 继承:
class CheckingAccount (BankAccount):
############ test case ################
最后给出一个test case的例子,好像书里面没有提到,但是上课还有project都要求使用,截取代码片段:
from createDb import *
import unitest
class TestMovieDb(unitest.TestCase):
def setUp(self):
self.movieInfo = {}
createDb()
def testCapStr(self):
self.assertEqual('Tom Cruise', capStr('tOm cRuiSE'))