zoukankan      html  css  js  c++  java
  • 初识函数--生成器

    1. 生成器本质就是迭代器,所以取值方式和迭代器一样,只不过迭代器是python自带的,生成器是自己写的
    2. 生成器的生成方式:a--通过生成器函数;b--推导式;c--python内置函数或模块(a,c本质一样,都是通过生成器函数,3是自带的,1是自己写)
    3. return和yield:
      • 都是返回值,都可以返回多个,只是return是一次性返回多个
      • return还会终止函数的执行,函数体内return后面的代码不执行
      • yield会记录当前的执行位置:一个yield对应一个next
    4. yield和yield from的区别(例3.3 例3.4):
      • yield:将可迭代对象一次性返回
      • yield from:将可迭代对象一个一个地返回
    # 例 3.1
    def func():
        print(1)
        yield 2
    
    func() # 函数的调用就是生成生成器,什么都不输出..如果只print(func())是生成器的内存地址
    print(func().__next__())   # 因为生成器的本质就是迭代器,所以取值和迭代器是一样的
    
    # 例 3.2
    def func():
        print(1)
        yield 11
        print(2)
        yield 22
    
    func()
    print(func())
    print(func().__next__())
    print(func().__next__())
    
    # 例 3.3
    def func():
        lst = [1,2]
        lst1 = ['alex','wusir','taibai','baoyuan']
        yield lst
        yield from lst1
    
    func()
    print(func().__next__())	# [1,2]
    print(func().__next__())	# 'alex'
    print(func().__next__())	# 'wusir'
    
    # 例 3.4
    def func():
        lst = [1,2]
        lst1 = ['alex','wusir','taibai','baoyuan']
        yield lst
        yield from lst1
    
    g = func()
    for i in g:
        print(i)
    # [1,2]
    # 'alex'
    # 'wusir'
    # 'taibai'
    # 'baoyuan'
    
    
    # 求[{x:y}]其中x是0-5之间的偶数以元组的形式,
    # y是0-5之间的奇数元组形式组成字典
    print({tuple([x for x in range(6) if x % 2 ==0]):
               tuple([y for y in range(6) if y % 2 == 1])})
    
  • 相关阅读:
    Leetcode刷题有感
    [博客迁移] 准备将博客从CSDN迁移至博客园
    加快Linux上yum下载安装包的速度(以CentOS 7,安装gcc为例)
    Linux能ping主机,但ping不了网关以及外网,显示包全丢失解决方案
    如何设置centos7的ip地址配置信息,让我的主机和它互Ping,以及远程登陆
    线程池 ThreadPoolTaskExecutor
    java Http请求
    java排序
    java的代理
    java的反射机制
  • 原文地址:https://www.cnblogs.com/richard_A/p/11938935.html
Copyright © 2011-2022 走看看