Python核心编程 第七章
2015-01-31 16:28
120 查看
1.工厂方法dict()创建字典,fromkeys()来创建一个默认的字典,字典元素中具有相同的值(如果没有给出值,默认None)。
2.字典中的键必须是可哈希的,所以数字和字符串可以作为字典中的键,但是列表和其他字典不行。
3.字典是通过先比较字典的大小,然后是键,最后是值的方法来进行比较。
4.内建hash()可以判断某个对象是否可以做一个字典的键。将一个对象作为参数传递给hash(),会返回这个的哈希值。只有这个对象是可哈希的,才可以作为字典的键(函数的返回值是整数,不产生错误或异常)。如果用比较操作符来比较两个数值,发现它们是相等的,那么即使二者的数据类型不同,它们也会得到相同的哈希值。如果非哈希类型作为参数传递给hash()方法,会产生TypeError错误。
5.
所有不可变的类型都是可哈希的,因此它们都可以做为字典的键。值相等的数字表示相同的键。同时,也有一些可变对象(很少)是可哈希的。一个实现了__hash__()特殊方法的类。因为__hash__()方法返回一个整数。元组做有效的键,必须要加以限制:元组中只包括数字和字符串这样的不可变参数,才可以作为字典中有效的键。
6.
如果这个脚本被直接执行(不是通过import方式),会调用showmenu()函数运行程序。
7.集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合(set)有两种不同的类型,可变集合(set)和不可变集合(fronzenset)。对可变集合(set),可以添加和删除元素,对于不可变集合(frozenset)则不允许这样做。可变集合(set)不是可哈希的,因此既不能用作字典的键也不能做其他集合中的元素。不可变集合(frozenset)有哈希值,能被用做字典的键或是作为集合中的一个成员。
8.
"小于"符号(<,<=)用来判断子集,"大于"符号(>,>=)用来判断超集。
9.
很多内建方法几乎和操作符等价。但它们之间有一个重要的区别:当用操作符时,操作符两边的操作数必须是集合。在使用内建方法时,对象也可以是迭代类型的。
2.字典中的键必须是可哈希的,所以数字和字符串可以作为字典中的键,但是列表和其他字典不行。
>>> dict2={} >>> dict2['name']='venus' >>> dict2['port']=6969 >>> dict2['arch']='sunos5' >>> print 'host %(name)s is running on port %(port)d' % dict2 host venus is running on port 6969
3.字典是通过先比较字典的大小,然后是键,最后是值的方法来进行比较。
4.内建hash()可以判断某个对象是否可以做一个字典的键。将一个对象作为参数传递给hash(),会返回这个的哈希值。只有这个对象是可哈希的,才可以作为字典的键(函数的返回值是整数,不产生错误或异常)。如果用比较操作符来比较两个数值,发现它们是相等的,那么即使二者的数据类型不同,它们也会得到相同的哈希值。如果非哈希类型作为参数传递给hash()方法,会产生TypeError错误。
5.
所有不可变的类型都是可哈希的,因此它们都可以做为字典的键。值相等的数字表示相同的键。同时,也有一些可变对象(很少)是可哈希的。一个实现了__hash__()特殊方法的类。因为__hash__()方法返回一个整数。元组做有效的键,必须要加以限制:元组中只包括数字和字符串这样的不可变参数,才可以作为字典中有效的键。
6.
db={}; def newuser(): prompt = 'login desired:'; while True: name = raw_input(prompt); if db.has_key(name): prompt = 'name taken, try another: '; continue; else: break; pwd = raw_input('passwd: '); db[name] = pwd; def olduser(): name = raw_input('login:'); pwd = raw_input('passwd:'); passwd = db.get(name); if passwd == pwd: print 'welcome back', name; else: print 'login incorrect'; def showmenu(): prompt = """ (N)ew User Login (E)xisting User Login (Q)uit Enter choice: """; done = False; while not done: chosen = False; while not chosen: try: choice = raw_input(prompt).strip()[0].lower(); except (EOFError, KeyboardInterrupt): choice = 'q'; print '\nYou picked: [%s]' % choice; if choice not in 'neq': print 'invalid option, try again'; else: chosen = True; done = True; newuser(); olduser(); if __name__ == '__main__': showmenu();提示信息被包括在三引号里,这样做是因为提示信息跨多行,而且比单行包含'\n'符号的字符串更容易处理。
如果这个脚本被直接执行(不是通过import方式),会调用showmenu()函数运行程序。
7.集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合(set)有两种不同的类型,可变集合(set)和不可变集合(fronzenset)。对可变集合(set),可以添加和删除元素,对于不可变集合(frozenset)则不允许这样做。可变集合(set)不是可哈希的,因此既不能用作字典的键也不能做其他集合中的元素。不可变集合(frozenset)有哈希值,能被用做字典的键或是作为集合中的一个成员。
8.
>>> s,t (set(['c', 'e', 'h', 'o', 's']), frozenset(['b', 'h', 'k', 'o', 'p', 's'])) >>> s == t False >>> s != t True >>> u = frozenset(s) >>> s == u True
"小于"符号(<,<=)用来判断子集,"大于"符号(>,>=)用来判断超集。
9.
很多内建方法几乎和操作符等价。但它们之间有一个重要的区别:当用操作符时,操作符两边的操作数必须是集合。在使用内建方法时,对象也可以是迭代类型的。
相关文章推荐
- Python核心编程 第七章课后习题
- python 核心编程 第七章习题
- Python 核心编程第七章7.1-7.3
- Python核心编程 第七章练习
- Python 核心编程笔记 第七章 序列(映射&集合)
- Python 核心编程第七章练习题
- Python核心编程 第七章 练习7–5
- python 核心编程 第七章 第八题
- python核心编程--第七章 7.12 练习
- python核心编程学习(第三章)
- 《Python核心编程》第二版第97页第五章练习 续一 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第55页第三章练习 续一 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第160页第六章练习 续二 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第160页第六章练习 续一 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第36页第二章练习 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第162页第六章练习 续六 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第36页第二章练习 续三 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第36页第二章练习 续二 -Python核心编程答案-自己做的-
- 《Python核心编程》第二版第160页第六章练习 续四 -Python核心编程答案-自己做的-
- Python核心编程 练习 第五章