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
  • 相关阅读:
    PAT 甲级 1115 Counting Nodes in a BST (30 分)
    PAT 甲级 1114 Family Property (25 分)
    PAT 甲级 1114 Family Property (25 分)
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/lpgit/p/9345925.html
Copyright © 2011-2022 走看看