Python【day 15-2】基本数据类型-dict tuple set

''''''
'''
变量的数据类型
int str bool list
5、字典 dict
    定义和写法:由{}表示,每个元素是key:value的键值对形式,元素间是逗号隔开
    特点:
        1、key是可哈希的-不可变类型(比如:int str tuple bool)
            value的类型是不限制的,可以存放任意数据类型
        2、字典是无序的,没有索引和切片
    常见操作:
        增
            1、dic[key] = value   #单个键值对添加,先建立一个空字典
            2、dic = {k1:v1,k2:v2} #一次添加多个键值对-字典的定义
            3、ret= dic.setdefault(key,value) #如果key已经存在,不会覆盖
               #添加键值对,返回添加的value
            4、dic2 = dic.fromkeys(iterable,value) #iterable中每个元素共用一个value
               dic2 = dict.fromkeys(iterable,value)  #类方法
                #注意点1:会新产生一个新字典,原字典本身不会改变
                #注意点2:fromkeys是一个类方法

        删
            1、pop
                参数是key,删除key对应的元素-键值对,并且获取被删除元素的value
            2、popitem
                参数是空,随机删除一个元素-键值对,并且获取被删除元素-键值对
                注意:从表面看,是删除了字典的最后一个键值对,但是字典的key是无序的,所有还是随机的
            3、del
                1、参数是key,删除key对应的元素-键值对
                2、还可以直接删除整个字典,回收内存空间
            4、clear
                清空字典的元素-键值对,变成空字典
        改
            1 dic[key] = 新value
                根据key获取到字典的value,对value进行重新赋值
            2 update
                dic1.update(dic2)
                把字典2的元素依次添加到字典1
                注意:如果字典2的key和字典1的key有相同的,会出现value的覆盖
        查-取值
'''
'''
            1 dic[key]
                根据自定的key取value值,如果key不存在,就报错
            2 get
                写法:字典.get(key[,value])
                参数1是key,参数2是默认返回值(不写默认是None)
                1、如果key存在,就返回字典中key对应的value
                2、如果key不存在,不会报错,会返回参数2(参数2不写默认是None)
                    这一点上,健壮性强于dic[key]来取值
            3 setdefault  添加元素,并取值元素的value(key如果已经存在,不会覆盖)
                写法:字典对象.setdefault(key1,value1)
                参数1是新增加元素的key,参数2是新增加元素-键值对的value
                1、将参数1和参数2作为新元素-键值对添加到字典对象
                    原字典对象添加了一个新元素-键值对
                2、返回者是参数2,即获取新增加的value作为返回值-这个返回value1就是取值
                    (和pop的删除并返回被删除值有类似之处,
                      setdefault是添加并返回添加的value)
                3、如果key1已经在原字典对象中存在了,新的键值对将无法添加,原字典对象保持不变
                    这里不会覆盖原字典对象的value
                    注意点:不会覆盖这个点和dic[key]=value,如果key已经存在,会覆盖,是不同的

        字典for循环:
            1、iterable
                dic1 dic1.keys() dic1.values()
            2、for i in dic1:
                   print(i,dic1[i])

                for i in dic1.keys():
                    print(i,dic1[i])  #用的比较少

                for i in dic.values():
                    print(i)  #适用场景:比如求value的平均值

                for i in dic1.items():
                    print(i)  #这里返回是列表,列表的元素是键值对元组 (k1,v1)

                for k,v in dic1.items():
                    print(k,v)

6 元组--tuple
    1、元组是只读的,不可变
        不可变的是元组的第一层
        如果元组的元素是列表,列表是可以添加删除元素的
    2、操作方法比较的少
        count()
        index()
        len()
    3、iterable-可迭代的
        支持for循环
        (for循环的取值速度:dict>set>list>tuple)
    4、元组是没有元组推导式的

7 集合-set
    1、集合的概念:只有key的字典
    2、特点:
        无序
        去重
        元素是不可变的(可哈希的)--因为字典的key是不可变的
    3、支持for循环,iterable
    4、可冻结的集合 frozen
        特点:frozen本身是不可变的(可哈希)
    5、操作
        两个集合之间可以& | -  (交集&、并集|、差集)等
    6、备注:
        set不能作为字典的key
        frozetkey作为字典的key
'''
'''''
'''
一、条件判断、循环
1 条件判断if
    if 条件:
        代码块(语句块)
    elif 条件:
        代码块
    elif 条件:
        代码块
    。。。
    else:
        代码块
2 循环
    1 while循环(条件循环)
        while 条件:
            循环体
            break (结束整个循环-本层,如果是2层循环,只能跳出1层,不能跳出2层)
            continue(结束本次循环-迭代,继续执行下一次循环)
        else:
            pass #当上面的while正常结束后(条件是False的时候,没有出现break),才执行这个语句

    2for循环--主要用于循环遍历取值

3 print
    print(message,end='\n',sep=' ')
    参数1:打印输出的信息
    参数2:行结束符,不写默认是换行 \n
    参数3:分隔符,不写默认是空格
           注意点:打印2个及以上元素,才会用到分隔符,打印一个元素,是用不到分隔符的

4 input  用户交互
5 range
    range(start,end,step) --range和切片的区别,分隔符不同,前者是逗号,后者是冒号
    #step不写,默认是1
    切片:li1(start:end:step)

6 文件路径的分隔符
    win  \   反斜杠-捺杠  \还表示转义 \t \r \n
    linux /  顺斜杠-撇杠

二、运算符
1、算数运算符
    + - * / // % **

2、比较运算符
    > >= < <= == !=

3、逻辑运算符
    and-与  两个同时为真,结果才是真
    or-或   两个中有一个是真,结果就是真
    not-非  非假即真 非真即假

    优先级顺序:  小括号() >not > and >or

    a and b
        如果a不是0,返回b
        如果a是0,返回a

    a or b
        如果a不是0,返回a
        如果a是0,返回b

4、赋值运算符
    += -= *= /= %=
    a+=b 等价于 a = a+b

5、成员运算符
     x in xx
     比如:判断列表或者字典的元素

6、is和==
    is比较的是内存地址
    ==比较的是值
    小数据池:int str bool这三种类型的对象创建之后,符合规则的,会被缓存到小数据池
              下次直接从小数据池中调用,从而节省内存
              比如:a1='jack'  a2='jack'
              在创建变量a1的时候,会新开辟一个内存空间,这个内存空间的名字是a1,里面的值存的是'jack'
                    且把这个内存空间缓存到小数据池子中
              在创建变量a2的时候,不会新开辟另外一个内存空间,而是把a2指向'jack'所在的内存地址
              即a1和a2的内存地址是一样的

7、文件操作
    open(文件路径,mode='模式',encode='编码')
    模式: r w a r+ w+ a+ rb wb ab
    for循环可以迭代文件句柄,拿到的是一行一行的内容
    seek(0,0) #光标移到文件开头  参数1是偏移量 参数2中:0表示文件开头,1表示文件当前位置,2表示文件末尾
    seek(0,2) #光标移到文件末尾
    seek(0,1) #光标移到当前位置
    tell()  #打印光标的当前位置

    with open(文件路径,mode='模式',encode='编码') as f:
        pass   #不需要flush和close

    文件修改:
        打开源文件,从源文件中读取内容到内存,修改,然后将内容写入到新文件。
        删除源文件,把新文件重命名成源文件的名字

 

posted @ 2019-11-18 10:13  王同佩  阅读(275)  评论(0编辑  收藏  举报