《像计算机科学家一样思考Python》章节试读

出版社:人民邮电出版社
出版日期:2013-8
ISBN:9787115320926
作者:(美)Allen B.Downey
页数:328页

《像计算机科学家一样思考Python》的笔记-第1页 - all

记录几个区别其它语法,自己较为常忘的用法于此。
循环/选择等用:
def定义函数
and or not
elif 不是 else if
带返回值函数返回用return,这一点类似C而不是matlab
多行注释'''
输入raw_input()
**表示次方,a**2
print语句结尾的逗号禁止产生新行
for char in fruit:
#注意in用法
>>> print s[0:5]
Monty
#注意切片用法
函数的语法upper(word),方法的语法word.upper()
for i in range(len(numbers)):
#组合使用range 和 in
t.append('d')
#append在列表结尾增加一个新元素
t1.extend(t2)
#extend将一个列表作为实参并追加所有的元素
列表方法都是无返回值的
三种列表元素删除方法:
t.pop(1)有返回值
区别del t[1] #可使用切片
t.remove('b')
将字符串分成单词 , 可以使用split方法
join和split相反。它接受一个字符串的列表并将元素串联起来。
a is b #相同的引用
字 典 ( dictionary)) 和列表类似,但是更一般。 在列表中,索引必须是整数,在字典中,
它们可以是(几乎)任意类型。
>>> eng2sp = dict()
花括号{}表示一个空字典。为了向字典内增加项, 你可以使用方括号:
>>> eng2sp['one'] = 'uno'
raise ValueError
#raise语句引起一个异常
#备忘录
known = {0:0, 1:1}
def fibonacci(n):
if n in known:
return known[n]
res = fibonacci(n-1) + fibonacci(n-2)
known[n] = res
return res
函数中声明全局变量global a,但声明时不能赋值
虽然并非必须,元组(tuples)通常用括号括起来:
>>> t = ('a', 'b', 'c', 'd', 'e')
为了用一个单独的元素生成一个元组, 你必须包括最后的逗号:
>>> t1 = 'a',
>>> type(t1)
<type 'tuple'>
>>> addr = 'monty@python.org'
>>> uname, domain = addr.split('@')
这是一个返回元组的函数的例子:
def min_max(t):
return min(t), max(t)
>>> t = [1, 2, 3]
>>> random.choice(t)
如果这个文件已经存在,使用写模式打开,会将其之前的内容全部抹去从零开始。 所以一
定要小心! 如果这个文件不存在,它会被创建。
>>> 'In %d years I have spotted %g %s.' % (3, 0.1, 'camels')
'In 3 years I have spotted 0.1 camels.'
读写时,‘a'模式为追加写
返回当前目录名:
>>> import os
>>> cwd = os.getcwd()
try:
fin = open('bad_file')
for line in fin:
print line
fin.close()
except:
print 'Something went wrong.'
内置函数repr可以起到帮助。它接受任何对象作为参数,返回其转化成字符串的显示。 对
于字符串来说,它将空白符转化成反斜杠序列。
可以使用assert语句,检查一个不变条件,当失败是产生一个异常:
def add_time(t1, t2):
assert valid_time(t1) and valid_time(t2)
seconds = time_to_int(t1) + time_to_int(t2)
return int_to_time(seconds)
#这里,valid_time返回值为bool
定义在类内成为方法,类外为函数
class User(object):
"This is user class."
name = "tom"
age = 0
def __init__(self, age=22):
self.age = age
def showAge(self):
print self.age
def showClassName(self):
print self.__class__.__name__
def showClassDoc(self):
print self.__class__.__doc__
实例化这个类:
user = User()
调用类里的属性name
print user.name
调用类里的方法showAge()
user.showAge()
约定方法的第一个参数写作self,所以可以把print_time重新写成:
class Time(object):
def print_time(self):
print '%.2d:%.2d:%.2d' % (self.hour, self.minute, self.second)
init方法(“initialization”的简称)是一个特殊的方法,当一个对象初始化的时候调 用。它
的全名是__init__(两个下划线后加init再加两个下划线)。一个 Time类的init方法看起
来像是:
# inside class Time:
def __init__(self, hour=0, minute=0, second=0):
self.hour = hour
self.minute = minute
self.second = second
__str__是一个和__init__方法类似的特殊方法,用来返回一个对象的字符 串表达。
#好像java的ToString()
通过定义其它的一些特殊方法,你可以在用户定义的类上指定运算符的行为。例如,如果
你为Time类定义了一个叫__add__的方法,你可以在Time对象上使用+ 运算。
if isinstance(other, Time):
内建的isinstance函数使用一个值和一个类对象,如果值是这个类的实例则返回 True。
为了调试目的,你可能发现下面这段代码非常有用:
def print_attributes(obj):
for attr in obj.__dict__:
print attr, getattr(obj, attr)
对于用户定义的类型,我们可以通过提供一个叫 __cmp__的方法来覆盖内建
的运算符的行为。
__cmp__ 使用2个参数, self 和 other,如果第一个对象更大,返回 一个正数,第二个元素更
大返回一个负数,如果相等返回0.
可以使用元组比较来使得代码更加简洁:
def __cmp__(self, other):
t1 = self.suit, self.rank
t2 = other.suit, other.rank
return cmp(t1, t2)
定义一个子类的方式和定义一个普通类比较相似,但是需要在括号写是父类的名称:
class Hand(Deck):


 像计算机科学家一样思考Python下载 更多精彩书评


 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024