Python之第十五天的努力--生成器,列表推导式,生成器表达式,内置函数1(了解)

Posted szheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之第十五天的努力--生成器,列表推导式,生成器表达式,内置函数1(了解)相关的知识,希望对你有一定的参考价值。

01 生成器

  1. Python社区,生成器与迭代器看成是一种。生成器的本质就是迭代器。

    唯一的区别:生成器是我们自己用Python代码构建的数据结构。迭代器都是提供的,或者转化得来的。

    • 获取生成器的三种方法:
      • 生成器函数。
      • 生成器表达式。
      • Python内部提供的一些。
  2. 生成器函数获取生成器:

    # 生成器函数
    def func():
        print(111)
        print(222)
        yield 3
        print(333)
        print(444)
        yield 4
    ret = func()
    print(ret)          # <generator object func at 0x0BDF15B0>
    print(next(ret))    # 111   222     3
    print(next(ret))    # 333   444     4
    # 一个next 对应一个yield
    
    # return   yield  区别
    # return:函数中只存在一个return结束函数,并且给函数的执行者返回值。
    # yield:只要函数中有yield那么他就是生成器函数而不是函数了
    # 生成器函数中可以存在多个yield,yield不会结束生成器函数,一个yield对应一个next。
    
    # def func():
    #     l1 = []
    #     for i in range(1,5001):
    #         l1.append(f‘{i}号包子‘)
    #     return l1
    # ret = func()
    # print(ret)
    
    def gen_func():
        for i in range(1,5001):
            yield f‘{i}号包子‘
    ret = gen_func()
    for i in range(200):
        print(next(ret))           # 1~200
    
    for i in range(200):
        print(next(ret))           # 201~400
    
  3. yield from

    # yield from
    
    # def func():
    #     l1 = [1,2,3,4,5]
    #     yield l1
    #     # 将l1 这个列表变成了迭代器返回
    # ret = func()
    # print(next(ret))            # [1, 2, 3, 4, 5]
    #
    def func():
        l1 = [1,2,3,4,5]
        yield from l1
        # 将l1 这个列表变成了迭代器返回
    ret = func()
    print(next(ret))            # 1
    print(next(ret))            # 2
    print(next(ret))            # 3
    print(next(ret))            # 4
    print(next(ret))            # 5
    
    
    def func():
        lst1 = [‘卫龙‘, ‘老冰棍‘, ‘北冰洋‘, ‘牛羊配‘]
        lst2 = [‘馒头‘, ‘花卷‘, ‘豆包‘, ‘大饼‘]
        yield from lst1
        yield from lst2
    
    
    g = func()
    for i in g:
        print(i)
    # 卫龙
    # 老冰棍
    # 北冰洋
    # 牛羊配
    # 馒头
    # 花卷
    # 豆包
    # 大饼
    

02 列表推导式

  • 用一行代码构建一个比较复杂有规律的列表。

  • 列表推导式

    • 循环模式:[标量(加工后的变量) for 变量 in iterable]

    • 筛选模式:[标量(加工后的变量) for 变量 in iterable if 条件]

    • 循环模式:

      # 循环模式
      # 将10以内所有整数的平方写入列表。
      l1 = [i*i for i in range(1,11)]
      print(l1)
      
      # 100以内所有的偶数写入列表.
      l2 = [i for i in range(2,101,2)]
      print(l2)
      # 从python1期到python100期写入列表lst
      l3 = [‘python‘+str(i)+‘期‘ for i in range(1,101)]
      l3 = [f‘python{i}期‘for i in range(1,101)]
      print(l3)
      
    • 筛选模式

      # 30以内能被三整除的数
      l1 = [i for i in range(1,31) if i%3 == 0]
      print(l1)
      
      # 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
      l2 = [‘aaaaa‘,‘bb‘,‘cccc‘,‘ddddd‘,‘kk‘]
      print([i.upper() for i in l2 if len(i) >= 3])
      
      # 找到嵌套列表中名字含有两个‘e’的所有名字(有难度)
      names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘],
               [‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]]
      print([name for lis in names for name in lis if name.count(‘e‘) == 2])
      

03 生成器表达式

# 生成器表达式:
# 与列表推导式的写法几乎一模一样。把[]换成()  也有筛选模式,循环模式,多层循环构建
print([i for i in range(1,11)])         # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print((i for i in range(1,11)))         # <generator object <genexpr> at 0x0C6015B0>
obj = (i for i in range(1,11))
for i in obj:
    print(i)

04 内置函数1(了解)

# 了解

# eval 剥去字符串的外衣运算里边的代码。有返回值
# s1 = ‘1 + 3‘
# print(s1)
# print(eval(s1))     # 4

# s = ‘{"name":"kkk"}‘
# print(eval(s),type(eval(s)))        # {‘name‘: ‘kkk‘} <class ‘dict‘>

# 网络传输的str  input 输入的时候,sql注入等等绝对不能使用eval。


# exec   与eval几乎一样,    代码流
# msg = ‘‘‘
# for i in range(10):
#     print(i)
# ‘‘‘
# print(msg)
# exec(msg)



# hash 哈希值



# help 帮助
# print(help(str))



# callable   判断能否调用
# s1 = ‘asdfg‘
# print(callable(s1))         # False
# def func():
#     pass
# print(callable(func))       # True



# bin:将十进制转换成二进制并返回。
# oct:将十进制转化成八进制字符串并返回。
# hex:将十进制转化成十六进制字符串并返回。
# print(bin(10),type(bin(10)))        # 0b1010 <class ‘str‘>
# print(oct(10),type(oct(10)))        # 0o12 <class ‘str‘>
# print(hex(10),type(hex(10)))        # 0xa <class ‘str‘>

以上是关于Python之第十五天的努力--生成器,列表推导式,生成器表达式,内置函数1(了解)的主要内容,如果未能解决你的问题,请参考以下文章

python学习第十二天,生成器,列表推导式

Python之第十九天的努力--复习1

Python入门-4控制语句:10推导式创建序列-列表推导式-字典推导式-集合推导式-生成器推导式

python列表生成式列表推导式

python----生成器--列表推导式-----内置函数-----

python-生成器进阶~各种推导式