zoukankan      html  css  js  c++  java
  • python学习之老男孩python全栈第九期_第二周学习总结

    迭代器

    双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的
    1. 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir(数据) )
    可迭代的一定可以被for循环
    2. 迭代器协议:含有__iter__、__next__的方法
    迭代器一定可迭代,可迭代的通过调用iter()方法就能得到一个迭代器
    迭代器的特点:
      很方便使用,且只能取所有的数据取一次
      节省内存空间

    for 循环其实就是在使用迭代器

    判断是不是迭代器,其实是为了使用for循环
    当我们遇到一个新的变量,不确定能不能for循环时,就判断它是否可迭代

    生成器

    生成器的表现形式
      1. 生成器函数
      2. 生成器表达式
    生成器函数:
    含有yield关键字的函数就是生成器函数
    特点:
      调用函数之后函数不执行,返回一个生成器
      调用next方法的时候会取到一个值
      直到取完最后一个,再执行next会报错
    从生成器中取值的几个方法
      1. next
      2. for
      3. 数据类型的强制转换:占用内存

    关于send()
    其实next()和send()在一定意义上作用是相似的
    区别是send()可以传递yield表达式的值进去,而next()不能传递特定的值,只能传递None进去
    因此,我们可以看做c.next() 和 c.send(None) 作用是一样的
    需要提醒的是,第一次调用时,请使用next()语句或是send(None),不能使用send发送一个非None的值,否则会出错
    最后一个yield不能接受外部的值

    生成器的表达式和列表推导式以及其他推导式

    1. 生成器表达式:
    g = (i for i in range(10))      # g是一个生成器
    for i in g:
    print(i)

    2. 列表推导式

    [每一个元素或是和元素相关的操作 for 元素 in 可迭代数据类型]                 # 遍历之后挨个处理
    [满足条件才进行操作的元素 for 元素 in 可迭代数据类型 if 元素相关的条件 ] # 筛选功能
    egg_list = ['鸡蛋%s'%i for i in range(10)]      # 列表推导式
    print(egg_list)

    3. 字典推导式
      将一个字典的key和value对调
    mcase = {'a': 10, 'b': 34}
    dic = {mcase[k]:k for k in mcase}
    print(dic)


    4. 集合推导式
      计算列表中每个值的平方,自带去重功能
    squared = {x*x for x in [1, -1, 2]}
    print(squared)


    没有元组推导式
    
    

    内置函数

    在此仅列出几个重要的内置函数:

    其他:input,print,type,hash,open,import,dir

    str类型代码执行:eval,exec

    数字:bool,int,float,abs,divmod,min,max,sum,round,pow

    序列——列表和元组相关的:list和tuple

    序列——字符串相关的:str,bytes,repr

    序列:reversed,slice

    数据集合——字典和集合:dict,set,frozenset

    数据集合:len,sorted,enumerate,zip,filter,map

    匿名函数

      为了解决那些功能很简单的需求而设计的一句话函数

    函数名 = lambda 参数 :返回值
    匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值

    返回值和正常的函数一样可以是任意数据类型

    看到匿名函数,就要想到肯定会带着考内置函数,而和匿名函数相关的内置函数只有5个:min max filter map sorted

    例题:现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

    没用匿名函数:
    tu1 =(('a'),('b'))
    tu2 =(('c'),('d'))
    res = zip(tu1,tu2)
    def func(tup):
        return {tup[0]:tup[1]}
    ret = map(func,res)
    # for i in ret:
    #     print(i)
    list(ret)

    用匿名函数:

    tu1 =(('a'),('b'))
    tu2 =(('c'),('d'))
    res = zip(tu1,tu2)
    # def func(tup):
    #     return {tup[0]:tup[1]}
    ret = map(lambda tup:{tup[0]:tup[1]},res)
    # for i in ret:
    #     print(i)
    print(list(ret))

    简化后一行:

    print(list(map(lambda tup:{tup[0]:tup[1]},zip((('a'),('b')),(('c'),('d'))))))
    View Code
  • 相关阅读:
    在spring中该如何使用DTO,以及DTO和Entity的关系
    AngularJs踩过的坑
    springMVC正确使用GET POST PUT和DELETE方法,如何传递参数
    Mac下使用终端连接远程使用ssh协议的git服务器
    springMVC的异常处理
    根据业务规则分析业务对象,然后生成表结构
    在线资源--图片/json等
    js中的Hook
    diamond源码阅读-目录监控
    maven常用命令
  • 原文地址:https://www.cnblogs.com/lpgit/p/9345925.html
Copyright © 2011-2022 走看看