zoukankan      html  css  js  c++  java
  • python进阶(一)~~~数据类型拓展

    基础数据类型:

    数值: 整数、浮点 、布尔类型

    序列:字符串、元祖、列表  --有序

    散列:字典、集合   ----无序

    拓展数据类型:

    一、命名元组

      示例:

    from collections import namedtuple
    
    tu
    =('lele',18,'') print(tu[0]) # 取数据 student= namedtuple('Student',['name','age','gender']) # 创建一个命名元祖,第一个参数为类名,第二个为参数名列表 s1 = student('lele',18,'') print(s1.name,s1[0]) # 可以根据字段名取值,也可以按下标取值,用起来更方便

    元祖和列表的区别:

      元组定义后,有几个参数就有几个内存位置,数量不会变化。因此性能较好。

      列表定义后,会预留一些位置,当向列表中追加数据至全部使用后,自动进行扩容,因此性能略差。

    二、推导式

      列表推导式:

    # 使用前
    
    url='http://...?page={}'
    urls= []
    for i in range(0,100,10)
         urls.append(url.format(i))
    print(urls)
    
    # 使用后,效果等同
    
    urls= [url.fomat(i) for i in range(0,100,10)]
    print(urls)

      三目运算符

    a=10
    res='ttrue' if a>5 else 'ffalse'  # 如果a大于5,输出 ttrue,反之输出 ffalse
    print(res) 
    res2='ttrue' if a>5 else ('equal' if a=5 else 'smaller') # 组合使用

      列表推导式与三目运算符 综合使用

    urls= [i for i in range(0,10) if i%2==0]  # 返回[0,2,4,6,8]

     字典推导式:

    list1=['name','age','gender']
    dict={i:1 for i in list1}
    print(dict)  # 输出 {'name':1,'age':1,'gender':1}

    可迭代对象和迭代器  

          可迭代对象:对象内部实现了迭代协议(即__iter__方法)的称之为可迭代对象;可迭代对象均可使用for循环遍历;

          迭代器:对象实现了迭代协议;内部还要实现__next__()方法,可以通过next()去取值;可通过iter()方法讲可迭代对象转化为迭代器;

          生成器是一种特殊的迭代器。

    #可迭代对象
    li=[11,22,33]
    for i in li:
        print(i)
    
    #迭代器
    item=iter(li)
    print(item)       # 返回   list_iterator object at ***
    print(next(item))

    生成器:当我们需要存储大量数据时,使用生成器可以节约内存  

         创建生成器的两种方式:

         方式一:生成器表达式:

    iter = (i for i in range(10))

         方式二:yield关键字。yield只能用于函数中,当函数中出现yield关键字时,这个函数就是一个生成器函数。

    def gen():
       for i in range(10):
           yield i
    res= gen()
    print(next(res))

    生成器与迭代器的区别:

     生成器比迭代器多3种方法:send() 、throw()、 close() ,与生成器内部交互,使之可以实现内部元素的变动,而迭代器内部元素不可变动。

    def gen():
       i = 0
       while i<10:
           j=yield i
    #print(j)
    if j is not None:
    i = j i
    + = 1 #send() 与生成器进行交互,发送数据; send 必须在next()执行后使用 g=gen() print(next(g)) print(g.send(100)) # send的数据在 yield i 行接收,yield默认返回值为None, 插入数据在print(j)打印出来
    #
    print(j) 控制台输出结果:0 100 1 ; 不使用print, 改为if 语句修改后,控制台输出结果: 0 101

    #close() 关闭生成器
    g.close()
    print(next(g))

    #throw() 在生成器内部主动引发一个异常,参数:异常类型,异常信息
    g.throw(ValueError,'hello ,python')
  • 相关阅读:
    每个Java开发人员都应该知道的10个基本工具
    2019年让程序员崩溃的 60 个瞬间,笑死我了
    面试官:服务器安装 JDK 还是 JRE?可以只安装 JRE 吗?
    腾讯工作近十年大佬:不是我打击你!你可能真的不会写Java
    作为Java开发人员不会饿死的5个理由
    趣味算法:国王和100个囚犯
    阿里第二轮面试:手写Java二叉树
    Linux软件安装——服务管理
    Linux帮助——重要文件
    Linux帮助——常用命令
  • 原文地址:https://www.cnblogs.com/qingyuu/p/12205238.html
Copyright © 2011-2022 走看看