zoukankan      html  css  js  c++  java
  • python 学习笔记(五)(元组,参数传递,字典dict)

    元组

    tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。

    同样是表示班里同学的名称,用tuple表示如下:

    >>> t = ('Adam', 'Lisa', 'Bart')
    创建tuple和创建list唯一不同之处是用( )替代了[ ]

    现在,这个 t 就不能改变了,tuple没有 append()方法,也没有insert()和pop()方法。所以,新同学没法直接往 tuple 中添加,老同学想退出 tuple 也不行。

    获取 tuple 元素的方式和 list 是一模一样的,我们可以正常使用 t[0],t[-1]等索引方式访问元素,但是不能赋值成别的元素,不信可以试试:

    >>> t[0] = 'Paul'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    

    tuple和list一样,可以包含 0 个、1个和任意多个元素。

    包含多个元素的 tuple,前面我们已经创建过了。

    包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示

    >>> t = ()
    >>> print(t)
    ()
    

    创建包含1个元素的 tuple 呢?来试试:

    >>> t = (1)
    >>> print(t)
    1
    

    好像哪里不对!t 不是 tuple ,而是整数1。为什么呢?

    因为**()既可以表示tuple,又可以作为括号表示运算时的优先级**,结果 (1) 被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。

    正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义:

    >>> t = (1,)
    >>> print(t)
    (1,)
    

    Python在打印单元素tuple时,也自动添加了一个“,”,为了更明确地告诉你这是一个tuple。

    多元素 tuple 加不加这个额外的“,”效果是一样的:

    >>> t = (1, 2, 3,)
    >>> print(t)
    (1, 2, 3)
    

    前面我们看到了tuple一旦创建就不能修改。现在,我们来看一个“可变”的tuple:

    >>> t = ('a', 'b', ['A', 'B'])
    

    注意到 t 有 3 个元素:‘a’,'b’和一个list:[‘A’, ‘B’]。list作为一个整体是tuple的第3个元素。list对象可以通过 t[2] 拿到:

    >>> L = t[2]
    

    然后,我们把list的两个元素改一改:

    >>> L[0] = 'X'
    >>> L[1] = 'Y'
    

    再看看tuple的内容:

    >>> print(t)
    ('a', 'b', ['X', 'Y'])
    

    不是说tuple一旦定义后就不可变了吗?怎么现在又变了?
    别急,我们先看看定义的时候tuple包含的3个元素:
    在这里插入图片描述
    当我们把list的元素’A’和’B’修改为’X’和’Y’后,tuple变为:
    在这里插入图片描述
    表面上看,tuple的元素确实变了,但其实变的不是 tuple 的元素,而是list的元素

    tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

    理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。


    参数传递

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述


    字典dict

    我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字:
    [‘Adam’, ‘Lisa’, ‘Bart’]
    或者考试的成绩列表:
    [95, 85, 59]
    但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。
    如果把名字和分数关联起来,组成类似的查找表:

    'Adam' ==> 95
    'Lisa' ==> 85
    'Bart' ==> 59
    

    给定一个名字,就可以直接查到分数。
    Python的 dict 就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:

    d = {
        'Adam': 95,
        'Lisa': 85,
        'Bart': 59
    }
    

    我们把名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value。
    花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
    由于dict也是集合,len() 函数可以计算任意集合的大小:

    >>> len(d)
    3
    

    注意: 一个 key-value 算一个,因此,dict大小为3。
    我们已经能创建一个dict,用于表示名字和成绩的对应关系:

    d = {
        'Adam': 95,
        'Lisa': 85,
        'Bart': 59
    }
    

    那么,如何根据名字来查找对应的成绩呢?
    可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key:

    >>> print(d['Adam'])
    95
    >>> print(d['Paul'])
    Traceback (most recent call last):
      File "index.py", line 11, in <module>
        print(d['Paul'])
    KeyError: 'Paul'
    

    注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。

    要避免 KeyError 发生,有两个办法:
    一是先判断一下 key 是否存在,用 in 操作符

    if 'Paul' in d:
        print(d['Paul'])
    

    如果 ‘Paul’ 不存在,if语句判断为False,自然不会执行 print d[‘Paul’] ,从而避免了错误。
    二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None

    >>> print(d.get('Bart'))
    59
    >>> print(d.get('Paul'))
    None
    

    字典暂时写到这

  • 相关阅读:
    Spring IOC(二)
    Spring组件注册
    第六章:随机数和expect
    第二十一节:异常处理
    第二十节:基础知识阶段复习
    LVM逻辑卷管理
    第十九节:类的装饰器和数据描述符的应用
    第十八节:上下文管理协议
    第十七节:数据描述符
    第十六节:内置函数补充
  • 原文地址:https://www.cnblogs.com/HBU-xuhaiyang/p/12776016.html
Copyright © 2011-2022 走看看