您的位置:首页 > 编程语言 > Python开发

Python核心编程 第七章

2015-01-31 16:28 120 查看
1.工厂方法dict()创建字典,fromkeys()来创建一个默认的字典,字典元素中具有相同的值(如果没有给出值,默认None)。

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.

很多内建方法几乎和操作符等价。但它们之间有一个重要的区别:当用操作符时,操作符两边的操作数必须是集合。在使用内建方法时,对象也可以是迭代类型的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: